2015-08-27 90 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);'这就是区别,这就是代码不工作的原因 –