MySQL插入更新 ON DUPLICATE KEY UPDATE

川长思鸟来 2023-10-06 17:00 156阅读 0赞

目录

ON DUPLICATE KEY UPDATE 简介

ON DUPLICATE KEY UPDATE 使用

ON DUPLICATE KEY UPDATE 注意事项:

ON DUPLICAET KEY UPDATE 空洞问题


ON DUPLICATE KEY UPDATE 简介

项目中偶尔会有这种需求:

我们想向数据库插入一条记录:

若数据表中存在以相同主键的记录,我们就更新该条记录。

否则就插入一条新的记录。

可以通过 ON DUPLICATE KEY UPDATE 达到以上目的, 且能保证操作的原子性和数据的完整性。

ON DUPLICATE KEY UPDATE 可以达到以下目的:

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。

否则插入一条新的记录。

ON DUPLICATE KEY UPDATE 使用

示例:

1 . 创建表,插入测试数据

  1. SET FOREIGN_KEY_CHECKS=0;
  2. -- ----------------------------
  3. -- Table structure for mRowUpdate
  4. -- ----------------------------
  5. DROP TABLE IF EXISTS `mRowUpdate`;
  6. CREATE TABLE `mRowUpdate` (
  7. `id` int(11) NOT NULL,
  8. `value` varchar(255) DEFAULT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB;

插入数据:

  1. -- ----------------------------
  2. -- Records of mRowUpdate
  3. -- ----------------------------
  4. INSERT INTO `mRowUpdate` VALUES ('1', 'sss');
  5. INSERT INTO `mRowUpdate` VALUES ('2', 'szh');
  6. INSERT INTO `mRowUpdate` VALUES ('3', '9999');
  7. SET FOREIGN_KEY_CHECKS=1;

2 .测试 ON DUPLICATE KEY UPDATE 的使用方法:

  1. INSERT INTO mRowUpdate(id,`value`) VALUES(3, 'SuperMan') ON DUPLICATE KEY UPDATE `value`='SuperMan';
  1. 查询数据的变化情况

Center

4.ON DUPLICATE KEY UPDATE 特别适用于多行插入。如:

INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);

Tips: VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

ON DUPLICATE KEY UPDATE 注意事项:

若多个索引都冲突,则只有一条记录被修改。

  1. create table test(
  2. id int not null primary key,
  3. num int not null UNIQUE key,
  4. tid int not null
  5. )

为了测试两个唯一索引都冲突的情况,然后插入下面的数据

  1. insert into test values(1,1,1), (2,2,2);

然后执行:

  1. insert into test values(1,2,3) on duplicate key update tid = tid + 1;

因为a和b都是唯一索引,插入的数据在两条记录上产生了冲突,然而执行后只有第一条记录被修改

ON DUPLICAET KEY UPDATE 空洞问题

详情见一下文章

https://www.jianshu.com/p/369559f399d0

发表评论

表情:
评论列表 (有 0 条评论,156人围观)

还没有评论,来说两句吧...

相关阅读