1

我有这张表用于存储照片信息:

CREATE TABLE foto (
id int(11) NOT NULL auto_increment,
id_galerie int(11) NOT NULL,
filename varchar(255) NOT NULL,
sort_nr int(11) NOT NULL default 1,
UNIQUE KEY (id_galerie, sort_nr),
PRIMARY KEY (id)
)

我需要自动增加列sort_nr,但仅限于一个id_galerie。所以我尝试了这个插入查询:

INSERT INTO foto (id_galerie, filename)
VALUES
(1, 'filename'),
(1, 'another filename'),
(1, 'anothername'),
(1, 'another value')
ON DUPLICATE KEY UPDATE sort_nr = sort_nr+1

但它抛出了一个错误(#1062 - 键“id_galerie”的重复条目“1-2”)。如果键不唯一,如何强制sort_nr自动递增?

4

1 回答 1

1

ON DUPLICATE KEY 检查主键,而不是唯一索引,这就是您看到错误的原因。不确定,甚至可以在没有额外查询的情况下进行。但是你可以用 INSERT INTO SELECT 来做到这一点:

   INSERT INTO foto (filename, id_galerie, sort_nr)
   SELECT 'filename', 1, (SELECT IFNULL(max(sort_nr) + 1,1) 
        FROM foto WHERE id_galerie = 1) AS `SortNumber`
于 2013-10-19T14:46:05.290 回答