insertOrUpdate 在我们日常使用中比较常见,那么它是如何实现的呢,不知道大家有没有考虑过呢?
在 MySQL 中,可采用INSERT INTO ... ON DUPLICATE KEY UPDATE语句实现 insertOrUpdate 功能。
值得留意的是,在出现重复键时,会在先前索引值和当前值之间添加临时键锁,这可能导致死锁。
若要使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句,需满足以下条件:
-
表必须具有主键或唯一索引; -
插入的数据必须包含主键或唯一索引列; -
主键或唯一索引列的值不能为 NULL。
举个例子:
设想有一张 student 表,包括 id、name 和 age 三列,其中 id 是主键。现在要插入一条数据,若该数据的主键已存在,则更新该数据的姓名和年龄,否则插入该数据。
INSERT INTO test (value) VALUES ('a')ON DUPLICATE KEY UPDATE value = 'a';

再执行一次:

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

这意味着下一次插入新记录时,自增主键的值会比之前增加,即 2 已经被用过了,虽然没插入成功,但是新的记录就直接用 3 了。
好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

本篇文章来源于微信公众号: 码上遇见你
微信扫描下方的二维码阅读本文

Comments NOTHING