mysql update语句会加什么锁

在 MySQL 中,UPDATE 语句会根据不同的存储引擎和隔离级别,自动获取不同的锁。下面是一些常见情况:

InnoDB 存储引擎和默认隔离级别(REPEATABLE READ)

在 InnoDB 存储引擎和默认的 REPEATABLE READ 隔离级别下,UPDATE 语句通常会获取以下两种锁:

  1. 行级锁(Row-level Lock): 对要更新的行进行锁定,防止其他事务同时更新同一行。
  2. 间隙锁(Gap Lock): 在索引中锁定可能被插入的间隙(gap),以防止其他事务在这个间隙中插入新行,从而影响当前事务的结果。

MyISAM 存储引擎

在 MyISAM 存储引擎中,UPDATE 语句会获取表级锁(Table-level Lock),这意味着在执行 UPDATE 操作期间,其他事务无法同时访问该表。

使用 WHERE 子句的 UPDATE 语句

如果 UPDATE 语句带有 WHERE 子句,MySQL 只会锁定满足条件的行和相关的索引间隙。未满足条件的行和间隙不会被锁定。

使用 LIMIT 子句的 UPDATE 语句

如果 UPDATE 语句带有 LIMIT 子句,MySQL 会先获取一个共享锁(Shared Lock),然后遍历符合条件的行并更新它们。在更新过程中,MySQL 会逐步升级锁定级别,直到所有需要更新的行都被锁定为排他锁(Exclusive Lock)。

总之,UPDATE 语句的锁定行为取决于存储引擎、隔离级别、WHERE 和 LIMIT 子句的使用情况。在高并发的环境中,合理使用索引、优化查询条件和避免不必要的锁定都可以帮助提高系统的性能和可扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值