2011-03-07 45 views

回答

1
INSERT IGNORE INTO tableName .... 

看到Docs

+0

謝謝,我沒有意識到,如果發生重複鍵異常,INSERT IGNORE仍然不插入記錄。很有幫助。 – stevebot 2011-03-08 00:20:33

+0

它確實* *做一個洞,該表的AUTO_INCREMENT計數器,但是,我覺得不可取...... – Landon 2015-04-02 21:26:41

+0

@Landon不正確的(與InnoDB的'innodb_autoinc_lock_mode' = 1(默認值)或2 – 2015-04-03 07:12:05

1

雖然這是真的,我發現,這樣做INSERT IGNORE會在您的汽車增量的ID孔。特別是,如果您執行INSERT IGNORE並且它與當前行發生衝突,則不會寫入任何數據(您要的數據),但是該表的auto_increment值會加1。

如果你像我一樣麻醉,自動增量欄中的孔會殺死你。所以我傾向於不這樣做。我只是這樣做:

INSERT INTO TABLE (column list) VALUES (value list) ON DUPLICATE KEY UPDATE random_column = random_column 

這確實成功無操作。這純粹是一種風格問題,但我認爲這種方法更清潔。

+0

-1 1)您答案是基於表格確實有附加列的要求。 2)你的答案不能解決你所說的auto_increment「漏洞」。以下SQL說明ID#2被跳過了。CREATE TABLE foo(ID INT NOT NOT PRIMARY KEY AUTO_INCREMENT,Bar INT,Qaz INT,UNIQUE KEY(Bar))ENGINE = INNODB; INSERT foo(Bar)VALUES(1); INSERT foo(Bar)VALUES(1)ON DUPLICATE KEY UPDATE Qaz = Qaz; INSERT foo(Bar)VALUES(2); SELECT * FROM foo; – 2015-04-03 07:10:05

相關問題