gpt4 book ai didi

MySQL - 事务和锁中的互斥?

转载 作者:行者123 更新时间:2023-11-29 23:25:47 24 4
gpt4 key购买 nike

我目前正在学习 MySQL 的事务和锁定功能。

具有隔离级别 SERIALIZABLE 的事务以及同一表上执行的 LOCKUNLOCK 语句之间的语句是否互斥?

<小时/>

编辑1:对于隔离级别SERIALIZABLE的事务,是否可以确定事务是否实际上是互斥的,或者只是满足无幻读等要求都满足了吗?或者这两个属性是否意味着相同的行为?

<小时/>

编辑2:哦,提供事务的给定隔离级别的机制是否仅在两个或多个事务实际上处理相同数据时才处于事件状态,以便读取现象实际上可能发生?

最佳答案

在 InnoDB 中,所有 SERIALIZABLE 所做的就是将 SELECT 转换为隐式 SELECT...LOCK IN SHARE MODE。因此,这只影响对相同行的 INSERT/UPDATE/DELETE。

可以在SHOW ENGINE INNODB STATUS中观察锁的情况:

---TRANSACTION 14594, ACTIVE 5 sec
2 lock struct(s), heap size 360, 8 row lock(s)
MySQL thread id 24, OS thread handle 0x7f65c8624700, query id 324 192.168.56.1 root cleaning up
TABLE LOCK table `imdb`.`kind_type` trx id 14594 lock mode IS
RECORD LOCKS space id 24 page no 4 n bits 80 index `kind` of table `imdb`.`kind_type` trx id 14594 lock mode S

我所做的只是在设置 tx_isolation=SERIALIZABLE 和 autcommit=0 后SELECT * FROM imdb.kind_type

您会看到它持有一个 IS 表锁,这将阻止 LOCK TABLES kind_type WRITE

但是如果您正在执行事务自动提交模式,它甚至不会这样做;它的作用就像可重复读取一样。

关于MySQL - 事务和锁中的互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26982261/

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