我有此表用于存储照片信息:
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 自动递增?
答案 0 :(得分: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`