加入收藏 | 设为首页 | 会员中心 | 我要投稿 通化站长网 (https://www.0435zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

MySQL中的各种锁

发布时间:2021-03-27 11:18:37 所属栏目:外闻 来源:互联网
导读:结构中有两个比较关键的信息(其实还有很多信息,后面再聊) trx信息:表示这个锁结构是和哪个事务所关联的 is_waiting信息:表示当前事务是否正在等待 事务T1 将数据改成了A,但是还未提交,可此时事务T2又将数据改成了B,覆盖了事务T1的更改,T1更新丢失,这

结构中有两个比较关键的信息(其实还有很多信息,后面再聊)

  • trx信息:表示这个锁结构是和哪个事务所关联的
  • is_waiting信息:表示当前事务是否正在等待
  • 事务T1 将数据改成了A,但是还未提交,可此时事务T2又将数据改成了B,覆盖了事务T1的更改,T1更新丢失,这种情况叫做脏写

Q:能描述一下两个事务并发修改同一条数据时,mysql这个锁是怎么避免脏写的吗?

A :事务T1在更改这条数据前,就先内存中生成一把锁与此数据相关联(is_waiting为false,代表没有等待),然后咔咔一顿操作更改数据,这个时候,事务T2来了,发现此记录已经有一把锁与之相关联了(就是T1那一把锁),然后就开始等待(is_waiting为true代表正在等待),事务T1更改完数据提交事务后,就会把此事务对应的所结构释放掉,然后检测一下还有没有与此记录相关联的锁,结果发现T2还在苦苦的等待,就把T2的锁结构的(is_waiting为false,代表没有等待)然后把T2事务对应的线程唤醒,T2获取锁成功继续执行,总体流程如上。

读-写 /写-读 情况

在读-写 / 写 -读的情况下会出现脏读,不可重复读,幻读的现象,不同的隔离级别可以避免不同的问题,具体相关内容可以看小杰的这篇文章 京东面试官问我:“聊聊MySql事务,MVCC?”

不过贴心的我还是列出来了 注:√代表可能发生,×代表不可能发生

(编辑:通化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读