【发布时间】:2013-09-21 19:45:53
【问题描述】:
我有这个 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`)
我对@987654322@ 有一个独特的约束
它不会更新值,但仅适用于插入新值 可能是什么问题
表架构
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 ;
【问题讨论】:
-
这些值是否已经存在于您的表中?
-
一些已经存在,例如一些零应该被更新为'1'
-
如果您有一个唯一索引 on(name,user_id) 仅当这 2 列中的组合值相同时才会触发 ON DUPLICATE - 而不是您插入的任何这些值的情况。
-
重点是如果在插入时,
(name, user_id)已经存在,然后将值更新为
标签: mysql sql bulkinsert insert-update