2011-03-15 83 views
3
create table test1 ( 
    id int not null auto_increment primary key, 
    a varchar(16), b varchar(16) 
); 


INSERT INTO test1 (a,b) VALUES ('a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

上面的行應該插入一個條目,因爲表是空的。Mysql在重複鍵上插入last_insert_id不起作用

INSERT INTO test1 (a,b) VALUES ('a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

再次運行線路,它應該"3"因爲a1, b3已經存在替代b。但是mysql爲我添加了另一條線。我搜索了一段時間,找不到解決方案。

最新更新:感謝您的幫助。我覺得其中一列必須是獨一無二的。

改變表test1添加唯一(a)

解決問題。

回答

1

只有在列中有UNIQUE KEY時纔會觸發ON DUPLICATE。嘗試在ab列的表格上添加一個唯一索引,它應該按預期工作。

+0

該id是主鍵。這將被視爲唯一索引?謝謝 – user661192 2011-03-15 19:03:30

+0

主鍵是UNIQUE INDEX的特例,所以是的。但是由於INSERT不會創建主鍵的重複值,因此不會使用update子句。 – Konerak 2011-03-15 19:33:13

1

你的情況沒有重複鍵。只有在你的表中是唯一的列是primary key id

嘗試

INSERT INTO test1 (id,a,b) VALUES (1,'a1','b3') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b='3'; 

兩次。 第一行文檔說。

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed. 

查看完整的documentation

+0

如果使用test1(id,a,b),只會更新id = 1嗎?我試圖設置列「a」爲非空,插入結果是相同的。 另外,由於id是自動增量,所以它必須設置爲主鍵。我不能使用列a作爲主要。 謝謝。 – user661192 2011-03-15 19:13:02

+0

我沒有得到你在說什麼。重點是這隻能用於主鍵或唯一索引。 – Zimbabao 2011-03-15 19:16:50

+0

對此感到抱歉。 「id」是我的案例中的主鍵。但是, INSERT INTO test1(id,a,b)VALUES(1,'a1','b3')ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id),b ='3'; 只會在id = 1時更改條目。如果我不知道該ID,我將無法更新數據。 謝謝。 – user661192 2011-03-15 19:23:53