Mysql
INSERT… ON DUPLICATE KEY UPDATE 沒有按我的預期工作
我有一個名為“範例”的表
CREATE TABLE IF NOT EXISTS `example` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
如果不存在,我想插入值,如果值存在則更新,所以我使用以下語句:
INSERT INTO example (a, b, c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c);
執行上述查詢後,表如下所示:
我再次執行上面的語句,結果如下所示:
我的陳述有什麼問題?
您的原始查詢
INSERT INTO example (a, b, c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c);
如果您考慮
(a,b,c)
使用唯一鍵,則需要做兩件事一、添加唯一索引
ALTER TABLE example ADD UNIQUE KEY abc_ndx (a,b,c);
所以表結構會變成
CREATE TABLE IF NOT EXISTS `example` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY abc_ndx (a,b,c) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
其次,您需要完全更改查詢。為什麼 ?
如果
(a,b,c)
是唯一的,則執行INSERT INTO example (a, b, c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c);
將保持
(a,b,c)
完全相同的值。什麼都不會改變。因此,我建議將查詢更改為以下
INSERT IGNORE INTO example (a, b, c) VALUES (1,2,3);
查詢更簡單,並且具有相同的最終結果。