数据库的事务隔离

2018.04.16

丢失修改。

排他锁(eXclusive Lock),X 锁。用于写数据。commit 后才释放。


脏数据。
进程读到未提交的内容。
一个程序读后,另一个程序提交前再次修改,则读的是脏数据。

共享锁(Share Lock),S 锁。用于读取数据。

多个进程可同时获取 S 锁。

一个数据加了 X 锁就无法加 S 锁,反之亦然。


读数据时,S 锁需要一直锁定,直到事务提交。否则释放锁后,再次读数据可能不一致。


幻读:一个事务内两次查询中数据条数不一致。
查询到符合某条件的数据项,X 锁锁定这些数据项,另一个程序插入新的数据项恰好符合条件,持 X 锁的程序再次查询时,数据项增多。


数据库事务的隔离级别

  • read uncommitted:一个程序 read 时,另一个持 X 锁的程序尚未 commit 。没有 S 锁。解决了丢失修改。

  • read committed:用 S 锁与 X 锁不能同时加来保证。解决了脏数据。

  • repeatable read:用 S 锁 commit 后才释放来保证。解决了重复读。

  • serializable:事务操作必须顺序执行。解决了幻读。

MVCC

多版本并发控制

在读的时候不用加锁,也能实现可重复读。

有两种事务 ID,一是进程的事务 ID,二是一条记录的事务 ID。

有一个叫 Read View 的数据结构,它由三部分组成:
一:活跃的进程事务 ID 列表。
二:活跃的进程事务 ID 最小值 Tmin。
三:最大进程事务 ID 最大值加一 Tmax。

每条记录有两个额外的字段 tid、回滚指针。

一个进程对某条记录修改后,tid 更新到当前进程,回滚指针指向记录的上一个版本。

http://mp.weixin.qq.com/s/cbaR--hlEN37fwTIRNhKaQ
http://mp.weixin.qq.com/s/EjVfk1iOuQUjLfPxt_DJ7Q
http://mp.weixin.qq.com/mp/homepage?__biz=MzAxOTc0NzExNg==&hid=4&sn=568693fc15f6e3693deaf11fcf489abc&scene=18#wechat_redirect

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、面板数据模型简介1.音频+图文稿:面板数据计量经济学分析内容简介、基本研究步骤网址:https://mp.we...
    李源源yyL阅读 624评论 0 3
  • 当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异...
    初来的雨天阅读 3,696评论 0 22
  • 10月24日科技概念股之人工智能入口上 1.1互联网内容的入口。每一个入口都会引起争夺,每个入口争夺的成功者都会变...
    瞰川阅读 222评论 0 0
  • 小猫和小狗小熊是好朋友,明天是小熊的生日了,小猫和小狗想给小熊做一个蛋糕。做个什么蛋糕呢?小熊喜欢吃奶油蛋糕,也喜...
    铭宇记录阅读 626评论 0 0

友情链接更多精彩内容