2015-08-27 131 views
3
 CREATE TABLE IF NOT EXISTS `table` (
     `id` int(11) NOT NULL DEFAULT '0', 
     `uniq_id` int(11) NOT NULL DEFAULT '0', 
     `uniq_cat` varchar(20) NOT NULL DEFAULT '0', 
     `value` varchar(255) NOT NULL 
    ); 

ALTER TABLE `table` 
ADD PRIMARY KEY (`id`), 
ADD UNIQUE KEY `uniq_id` (`uniq_id`,`uniq_cat`); 

INSERT INTO `table` (uniq_id, uniq_cat, value) 
VALUES ("1", "1", "ONE") 
ON DUPLICATE KEY UPDATE value = value; 

INSERT INTO `table` (uniq_id, uniq_cat, value) 
VALUES ("1", "1", "TWO") 
ON DUPLICATE KEY UPDATE value = value; 

SELECT * FROM `table` 

給出值= 「ONE」
WHY ???
在第二刀片應該從「一」到「二」被覆蓋,但這種情況不會發生mysql:插入〜重複鍵(多重唯一,不是pimary鍵)更新。不起作用

http://sqlfiddle.com/#!2/e443e/1

+0

'對重複密鑰更新值=價值;'意味着什麼都不做是有過一個名爲'value'值。這就是爲什麼你的插入不會覆蓋數據 – Hearner

回答

2

沒有您insert into...ON DUPLICATE KEY語法問題。試試這個:

INSERT INTO `table` (uniq_id, uniq_cat, value) 
VALUES ("1", "1", "ONE") 
ON DUPLICATE KEY UPDATE value = values(value); 

INSERT INTO `table` (uniq_id, uniq_cat, value) 
VALUES ("1", "1", "TWO") 
ON DUPLICATE KEY UPDATE value = values(value); 

SQLFIDDLE DEMO

+0

我不明白爲什麼我的解決方案不起作用,但它的工作原理。謝謝 – scrache

+0

@scrache: - 不客氣。檢查一行:'ON DUPLICATE KEY UPDATE value = values(value);'這就是區別,這就是代碼不工作的原因 –