美文网首页Mysql知识总结
数据库的隔离级别(当访问多个事务时)

数据库的隔离级别(当访问多个事务时)

作者: 你好旧时光912 | 来源:发表于2019-03-30 19:12 被阅读0次

    同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制,就会导致各种并发问题 , 比如:

    脏读(没有被提交的操作)

    对于两个事务 T1,T2, T1 读取了已经被 T2 更新但还没有被提交的字段之后, 若T2 回滚, T1读取的内容就是临时且无效的。

    T1:张飞女朋友转500元给张飞,但是没有提交事务T1

    T2:张飞看账户余额500元(开心坏了)

    然后女朋友撤销500元转账操作(T1回滚),那么张飞看到的500元是临时无效的数据,是脏读的数据。

    ②不可重复读(在脏读基础之上,更新update操作)

    对于两个事务T1, T2, T1读取了一个字段, 然后T2更新了该字段之后, T1再次读取同一个字段, 值就不同了。

    张飞第一次读账户余额500元

    张飞第二次读账户余额0元

    ③幻读(插入insert/删除delete

    对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后T2在该表中插入了一些新的行之后, 如果T1 再次读取同一个表, 就会多出几行。

    张飞:请班级班上同学吃饭(班上就两位同学)

    然后在没有请客之前,班上有来了一位同学

    (由原来的请两位同学吃饭、变成请三位同学吃饭,感觉出现了幻觉)

     


     数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响, 避免各种并发问题。

    ①读未提交数据(read uncommited):

    脏读、不可重复读、幻读都不可避免

    ②读已提交的数据(read commited):

    脏读可避免,不可重复读和幻读不可避免

    事务T1: 将字段张无忌改成张飞,未提交

    事务T2:当T1未提交,读张无忌;当T1提交后,T2读成张飞

    同一事务两次读的不一样。

    ③可重复读(repeatable read):

    脏读和不可重复读可避免,幻读不可避免

    ④串行化(serializable):

    脏读、不可重复读、幻读都可避免

    相关文章

      网友评论

        本文标题:数据库的隔离级别(当访问多个事务时)

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