事务产生的脏读幻读不可重复读

事务并发产生的问题:
        脏读:一个事务读取到了另外一个事务没有提交的数据
            事务1:更新一条数据
                             ------------->事务2:读取事务1更新的记录
            事务1:调用commit进行提交
            
            ***此时事务2读取到的数据是保存在数据库内存中的数据,称为脏读。
            ***读到的数据为脏数据
            详细解释:
                脏读就是指:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,
                另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个
                事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
            
       不可重复读:在同一事务中,两次读取同一数据,得到内容不同
            事务1:查询一条记录
                            -------------->事务2:更新事务1查询的记录
                            -------------->事务2:调用commit进行提交
            事务1:再次查询上次的记录
            
            ***此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读
            
        幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同
            事务1:查询表中所有记录
                              -------------->事务2:插入一条记录
                              -------------->事务2:调用commit进行提交
            事务1:再次查询表中所有记录
            
            ***此时事务1两次查询到的记录是不一样的,称为幻读
            详细解释:
                幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,
                这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表
                中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,
                就好象发生了幻觉一样。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章