【问题标题】:insert on duplicate not saving插入重复不保存
【发布时间】: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`)

我对@9​​87654322@ 有一个独特的约束

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

表架构

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


【解决方案1】:

你需要定义

UNIQUE KEY(name, user_id)

仅仅定义一个索引并不能防止重复。您需要使用UNIQUE 关键字。

【讨论】:

  • @Smith 不,你说你有一个“索引”
  • @Smith 请将show create table mlm_user_settings; 的结果添加到您的问题中
【解决方案2】:

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

它适用于这个小提琴检查最后一个插入。

在这 2 个最后插入上

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2021-05-11
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多