插入复制不保存

时间:2013-09-21 19:45:53

标签: mysql sql bulkinsert insert-update

我有这个sql,如果项目存在则更新表格,如果不存在则插入它

INSERT INTO `mlm_user_settings` (`name`, `value`,`user_id`) 
VALUES ('notify_options','opt_none','7'), 
('chk_signup','0','7'),
('chk_activate','0','7'), 
('action','save','7'), 
('chk_acct','0','7'), 
('chk_message','0','7') 
ON DUPLICATE KEY UPDATE `value` = VALUES(`value`)

我对index (name , user_id)

有一个独特的约束

它不会更新值,但仅适用于插入新值 可能是什么问题

表架构

CREATE TABLE `mlm_user_settings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `value` varchar(200) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id` (`user_id`,`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

2 个答案:

答案 0 :(得分:1)

您需要定义

UNIQUE KEY(name, user_id)

简单地定义索引不会阻止重复。您需要使用UNIQUE关键字。

答案 1 :(得分:1)

http://sqlfiddle.com/#!2/7e664/1

它适用于最后一次插入的小提琴检查。

在这两个最后插入

('chk_message','0','7'),
('chk_message','newvalue','7')

约束是触发器,因为2列中的值是相同的'chk_message','7' 所以它用新值更新:0用'newvalue'更新。