美文网首页
什么是事务,有什么用

什么是事务,有什么用

作者: MobotStone | 来源:发表于2022-03-21 23:52 被阅读0次

    事务的特点

    一系列的DML操作(不可分割):增删改查--crud

    • 原子性:要么全部可以,要么全部不可以

    • 一致性:保证事务在状态改变中数据的一致性

    • 隔离:一个事务的开启,不影响其他事务运行

    • 持久性:一个事务执行完后,写入到数据库中,并持久化到磁盘上

    事务隔离级别

    事务隔离级别 脏读 不可重复读 幻读
    读未提交 (read-uncommitted)
    读已提交 (read-committed) 不会
    不可重复读 (repeatable-read) 不会 不会
    串行化 (serializable) 不会 不会 不会

    1. 脏读

    一个事务读取了另外一个事务未提交的数据,就是脏读。

    事务1: A给B转账500,但是事务未提交。
    事务2: B查看了账户,发现A转过来500,本来只转300过来就好,发现多转了200,心里美滋滋。。。
    事务1: A及时发现多转了200,修改了转300,提交事务。
    

    若避开脏读,可以设置隔离级别为Read committed

    2. 不可重复读

    一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,这种就是不可重复读。不可重复读侧重于修改

    事务1:B去买东西,卡里有500块钱,消费100,还没提交事务。
    事务2:B的老婆把B的500块钱转出去了,已提交事务。
    事务1:B此时提交事务,支付不了。再次读取发现卡里没钱支付。
    

    若避开不可重复读,可以设置隔离级别为Repeatable read

    3.幻读

    一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。Mysql的默认隔离级别为Repeatable read,可以避免不可重复读,但是可能出现幻读的情况。侧重于新增或删除

    事务1:B的老婆查看B的卡消费记录,目前共消费了500元。
    事务2:B此时刚在外面请朋友吃完饭,付款了100,事务已提交。
    B的老婆决定把账单打印出来,晚上跟B对账,却发现打印出来的消费为600元。她刚才明明看到是500,怎么是600,难道是幻觉?
    

    那么可以将隔离级别设置为最高级的Serializable

    相关文章

      网友评论

          本文标题:什么是事务,有什么用

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