事务和线程的区别还有事务并发执行引起的四个问题:丢失修改、脏读、不可重复读,幻读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014698348/article/details/53140368
事务和线程的区别:
       1、线程一定是并发执行的,但是事务可以串行执行;
       2、事务是可以撤销的。

事务并发执行,不加锁,会引起的四个问题:(线程不加锁也会因此这四个问题)

1、丢失修改
事务T1,T2读取同一个数据,之后先后将修改的内容,写回数据库,会导致一个事务丢失修改。
例子:
数据a = 1;
T1, T2对a加1, 先后将读取a的之后, 又先后将2写进a,这样导致丢失修改。正确的a的值应该是3。

2、脏读
T1修改某个数据a,这是T2去读,之后T1撤销事务,a回到原来的值,这是T2读到的a的值就是一个错误的值,即脏数据。

3、不可重复读
T1读取了一个数据之后,之后T2修改了这数据,T1在读这个数据,发现和之前读的不相同。

4、幻读
T1按照某个条件从数据库中查找出了某些数据,之后T2对表的记录进行插入和删除,T1在按相同的条件从数据库中,查找数据,发现记录条数多了或者少了,就像出现幻觉一样。
阅读更多
换一批

没有更多推荐了,返回首页