美文网首页
2022-08-07 数据库与锁

2022-08-07 数据库与锁

作者: zhangwenqiang | 来源:发表于2022-08-07 21:46 被阅读0次

    多事务处理数据时遇到的问题和原因

    1.脏读(读到了不存在数据)原因:读未提交
    2.不可重复读(两次读一条数据,值不一样)原因:读已提交
    3.幻读(两次读数据集,数据的条数不一样)原因:表未锁,没有行间锁(间隙锁)

    数据库的隔离级别

    1.读未提交
    2.读已提交
    3.可重复读(加锁,读到的东西不可以被修改)
    4.序列化

    mvcc隔离级别的实现原理

    0.数据行的隐藏字段:
    数据行id 修改后数据行内容 当前的事务id 回滚id
    回滚id 对应的是 undo表中修改前的数据 ,如下
    数据行id 本次修改前数据行内容 之前的事务id 之前回滚id
    1.读已提交:每条记录有一个事务id,表的每个事务的事务id是递增的,表会保存最大的已提交的事务id,和当前最大的事务id。如果一条事务读一条数据,判断这条数据的事务id是否小于 ”表保存的最大的已提交的事务id“,小于则表示这条数据已提交,否则根据这条数据的rollbackId在undo表中找到旧的数据,直到找到已提交的数据。
    2.二级索引只是对主键索引的指针,没有保存真正的数据,需要先找到对应的主键,再寻找数据。

    共享锁(share)S
    排它锁(exclusive)X
    意向共享锁(intent share)IS
    意向排它锁(intent exclusive)IX
    间隙锁

    相关文章

      网友评论

          本文标题:2022-08-07 数据库与锁

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