insertOrUpdate 在我们日常使用中比较常见,那么它是如何实现的呢,不知道大家有没有考虑过呢?

在 MySQL 中,可采用INSERT INTO ... ON DUPLICATE KEY UPDATE语句实现 insertOrUpdate 功能。

值得留意的是,在出现重复键时,会在先前索引值和当前值之间添加临时键锁,这可能导致死锁。

若要使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句,需满足以下条件:

  1. 表必须具有主键或唯一索引;
  2. 插入的数据必须包含主键或唯一索引列;
  3. 主键或唯一索引列的值不能为 NULL。

举个例子:

设想有一张 student 表,包括 id、name 和 age 三列,其中 id 是主键。现在要插入一条数据,若该数据的主键已存在,则更新该数据的姓名和年龄,否则插入该数据。

INSERT INTO test (value) VALUES ('a')ON DUPLICATE KEY UPDATE value = 'a';
image.png

再执行一次:

image.png

此时,由于 value 列存在唯一键约束,并且已经存在一条记录 value='a',所以不会插入新记录,而是会执行更新操作。但即便如此,自增主键 id 的计数器依然会增加。

然后再插入一条新的记录:

image.png

这意味着下一次插入新记录时,自增主键的值会比之前增加,即 2 已经被用过了,虽然没插入成功,但是新的记录就直接用 3 了。

本篇文章来源于微信公众号: 码上遇见你



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2024-08-01