美文网首页
数据库事务相关

数据库事务相关

作者: 内沐 | 来源:发表于2020-04-29 13:43 被阅读0次

    事务隔离级别(tx_isolation)
    mysql 有四级事务隔离级别 每个级别都有字符或数字编号

    级别 symbol 描述
    读未提交 READ-UNCOMMITTED 0 存在脏读、不可重复读、幻读的问题
    读已提交 READ-COMMITTED 1 解决脏读的问题,存在不可重复读、幻读的问题
    可重复读 REPEATABLE-READ 2 mysql 默认级别,解决脏读、不可重复读的问题,存在幻读的问题。使用 MMVC机制 实现可重复读
    序列化 SERIALIZABLE 3 解决脏读、不可重复读、幻读,可保证事务安全,但完全串行执行,性能最低

    我们可以通过以下命令 查看/设置 全局/会话 的事务隔离级别

     SELECT @@global.tx_isolation, @@tx_isolation;
    
    @@global.tx_isolation @@tx_isolation
    REPEATABLE-READ REPEATABLE-READ

    丢失修改:指两个事务T1和T2从数据库中读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失

    不可重复读:不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。

    不可重复读包括三种情况:

    事务T1读取某一数据后,事务T2对其做了修改,

    当T1再次读该数据时,得到与前一次不同的值。

    事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神密地消失了。

    事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。

    后两种情况也称为幻影现象(Phantom Row)。
    

    脏读:读“脏”数据:事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时事务1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据称为“脏”数据。

    e.g:丢失修改

    image

    幻读:

    幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。

    不可重复读侧重表达 读-读,幻读则是说 读-写

    MVCC (Multiversion concurrency control) 多版本并发控制

    参考文章:https://segmentfault.com/a/1190000016566788

    相关文章

      网友评论

          本文标题:数据库事务相关

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