首页 > 解决方案 > MySQL:插入重复键更新 - 更新不起作用

问题描述

在 MySQL INSERT ON DUPLICATE KEY UPDATE更新不起作用但插入工作正常。

我已经尝试了所有可能。

我当前的索引是username当前的 pk 是id

这是我的查询,

insert into 
    myDB.auth_tbl 
    (username, `password`, first_name, last_name, email, is_super, is_active, date_joined) 
    values 
    ('me', 'encrypt', 'me', '', 'me@gmail.com', 0, 1, '0000-00-00')
    on duplicate key update `id` = LAST_INSERT_ID(id), `username` = 'me';

注意:我查阅了很多参考资料,并尝试了很多答案。其中之一是,我尝试了这个问题,但仍然不适合我。

我错过了什么吗?

标签: mysqlinserton-duplicate-key

解决方案


这是一个示例:

CREATE TABLE IF NOT EXISTS `auth_tbl` (
  `id` int(11),
  `username` varchar(32),
  `password` varchar(32),
  `first_name` varchar(32),
  `last_name` varchar(32),
  `email` varchar(32),
  `is_super` int(3) ,
  `is_active` int(3) ,
  `date_joined`  date NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY(`username`) 
) DEFAULT CHARSET=utf8;


 insert into 
    auth_tbl 
    (username, `password`, first_name, last_name, email, is_super, is_active, date_joined) 
    values 
    ('me', 'encrypt', 'me', '', 'me@gmail.com', 0, 1, '1900-01-01')
    on duplicate key update  `email` = 'me2@gmail.com';



 insert into 
    auth_tbl 
    (username, `password`, first_name, last_name, email, is_super, is_active, date_joined) 
    values 
    ('me', 'encrypt', 'me', '', 'me@gmail.com', 0, 1, '1900-01-01')
    on duplicate key update  `email` = 'me2@gmail.com';

推荐阅读