美文网首页
数据库事务

数据库事务

作者: 我就不想当菜鸟 | 来源:发表于2018-03-16 11:34 被阅读0次

    数据库有以下几种并发问题:

    1. 第一类更新丢失


      image
    2. 脏读


      image
    3. 幻读


      image
    4. 不可重复读


      image
    5. 第二类更新丢失


      image

    数据库事务隔离级别

    1. READ_UNCOMMITED

    • 事务对当前被读取的数据不加锁;
    • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级共享锁,直到事务结束才释放。

    表现:

    • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对该记录的修改版本,即使该修改尚未被提交。
    • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

    2. READ_COMMITED

    • 事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁
    • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

    表现:

    • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的只能是事务2对其更新前的版本,要不就是事务2提交后的版本。
    • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

    3. REPEATABLE READ

    • 事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放;
    • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

    表现:

    • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的仍然是第一次读取的那个版本。
    • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

    4. SERIALIZABLE

    • 事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;
    • 事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。

    表现:

    • 事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。
    • 事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。

    数据库锁机制:悲观锁,乐观锁

    image

    相关文章

      网友评论

          本文标题:数据库事务

          本文链接:https://www.haomeiwen.com/subject/zxslqftx.html