gpt4 book ai didi

mysql - Mysql在进行UPDATE查询时默认使用排它锁吗?

转载 作者:行者123 更新时间:2023-11-29 09:28:08 26 4
gpt4 key购买 nike

环境:Mysql5.7 InnoDB

连接

start transaction; --> <1>

SELECT * FROM table_a WHERE id = 1 lock in share mode; --> <2>

B连接

UPDATE table_a SET name = 'blah' WHERE id = 1; --> <3>

函数流程:<1> -> <2> -> <3>

结论:<2>查询结果为blahblah。但是,B Query(<3>) 会等待。

B 查询没有锁。

为什么我会得到这个结果?Mysql在进行UPDATE查询时默认使用排他锁吗?

最佳答案

UPDATE 查询需要对其检查的行持有独占锁,因此它将等待,直到这些行上没有其他锁。

SELECT 查询不会阻止 UPDATE 查询,除非 SELECT 是带有 FOR UPDATE、FOR SHARE 或 LOCK IN SHARE MODE 子句的锁定查询。

如果您使用事务隔离级别 SERIALIZABLE,则所有 SELECT 语句都隐式具有 LOCK IN SHARE MODE,因此它们将阻止 UPDATE。但这不是默认配置,因此您必须刻意请求它。

关于mysql - Mysql在进行UPDATE查询时默认使用排它锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59243287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com