mysql实现upsert(没有就新增,有就修改)

写在前面

当实际工作中遇到这么一种需求:数据库没有这条数据,我需要新增,有这条数据我需要修改,或者某个字段的数量进行调整。

那么我们就可以考虑使用mysql的upsert语句了。

建表准备

 
  1. CREATE TABLE `student` (
  2. `id` varchar(50) NOT NULL DEFAULT '',
  3. `name` varchar(50) DEFAULT NULL,
  4. `age` int(11) DEFAULT NULL,
  5. `sign` int(11) DEFAULT NULL COMMENT '签到次数',
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `inx_id` (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

upsert语句

 
  1. INSERT INTO student ( id, NAME, age, sign )
  2. VALUES
  3. ( '1', '张三', 18, 1 )
  4. ON DUPLICATE KEY UPDATE NAME = '李四';
 

当我们第一次执行的时候,会发现影响行数是1:

 此时数据库里面的数据:

 当我们第二次执行的时候,发现影响行数是2:

此时数据库中的数据:

 我们可以看到数据已经发生改变了。

现在执行下面的sql

 
  1. INSERT INTO student ( id, NAME, age, sign )
  2. VALUES
  3. ( '1', '张三', 18, 1 )
  4. ON DUPLICATE KEY UPDATE sign = sign+1;
 

我们可以看到影响行数是2:

 此时数据库中的数据:

当然,如果想根据指定字段进行修改,可以简写为(如果id重复,name修改为新的name):

 
  1. INSERT INTO student ( id, name, age, sign )
  2. VALUES
  3. ( '1', '张三', 18, 1 )
  4. ON DUPLICATE KEY UPDATE name = VALUES(name);
 

 总结

mysql的upsert语句,其实就是根据唯一的主键(也可以是联合主键)判断的,如果没有的话就新增,如果有的话就按照主键来修改。

关键语句:

使用 ON DUPLICATE KEY UPDATE

posted @ 2024-10-24 10:40  CharyGao  阅读(47)  评论(0编辑  收藏  举报