mysql 更新一条不存在的数据,加了什么锁?

mysql 更新一条不存在的数据,加了什么锁?

问题

如题

数据准备

mysql> select * from t_age;
+----+-----+---------+
| id | age | address |
+----+-----+---------+
|  1 |   1 | a       |
|  2 |   5 | b       |
|  3 |   8 | c       |
|  4 |   5 | d       |
|  5 |  15 | e       |
+----+-----+---------+
5 rows in set (0.02 sec)

更新一条不存在的数据

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t_age set address='ll' where age=6;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

查看锁信息 
# show engine innodb status
TABLE LOCK table `t_age` trx id 255076 lock mode IX
RECORD LOCKS space id 18 page no 5 n bits 80 index idx_age of table `t_age` trx id 255076 lock_mode X locks gap before rec
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 4; hex 80000008; asc     ;;
 1: len 4; hex 80000003; asc     ;;

显示的是使用了 lock_mode X locks gap before rec 即 间隙锁

注意

不同类型的锁,其各自的关键字为:

  • 表级的意向排它锁(IX):lock mode IX。
  • 表级的插入意向锁(LOCK_INSERT_INTENTION): lock_mode X locks gap before rec insert intention
  • 行级的记录锁(LOCK_REC_NOT_GAP): lock_mode X locks rec but not gap
  • 行级的间隙锁(LOCK_GAP): lock_mode X locks gap before rec
  • 行级的 Next-key 锁(LOCK_ORNIDARY): lock_mode X
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的并发更新同一记录,是指多个并发事务同时对同一条记录进行更新操作的情况。 MySQL通过使用机制来确保并发操作的一致性和数据完整性。在并发更新同一记录的情况下,MySQL自动将其中一个事务加锁,阻止其他事务对该记录进行修改,直到当前事务完成或者释放MySQL提供了两种类型的:共享和排他。 共享(Shared Lock)也称为读,多个事务可以同时持有共享,用于并发读取相同的记录。获得共享的事务之间互不干扰,可以同时读取数据。 排他(Exclusive Lock)也称为写,只有一个事务可以持有排他,用于对记录进行修改。其他事务在当前事务持有排他期间无法读取或修改该记录。 当多个事务同时更新一条记录时,存在一定的并发控制问题。MySQL通过使用机制和事务隔离级别来解决这些问题。 在事务隔离级别为读已提交(Read Committed)或可重复读(Repeatable Read)的情况下,MySQL根据事务的隔离级别自动选择适当的机制,确保并发更新同一记录时数据的一致性。 如果并发更新一条记录的事务操作过于频繁,可能导致竞争,从而降低数据库的处理性能。为了提高并发性能,可以考虑调整事务隔离级别,或者使用更细粒度的策略,例如行级。 总之,MySQL通过合理的机制和事务隔离级别来处理并发更新同一记录的情况,确保数据的一致性和完整性。在实际使用中,需要根据具体的业务需求和性能要求选择适当的机制和事务隔离级别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值