2013-10-19 157 views
1

MySQL數據庫的概念,我有這個表用於存儲照片信息:的照片庫

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自動遞增?

回答

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` 
+0

謝謝,它似乎工作。雖然我很困惑。 –

+1

@lineman如果你在InnoDB引擎上,競爭條件會在這裏發生......因爲不計算MAX計算..不建議這樣生成你自己的auto_increment –

+0

@Raymond我會一次只爲一行插入查詢。那麼這不會是一個問題,是嗎? –