事务和线程的区别:
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在按相同的条件从数据库中,查找数据,发现记录条数多了或者少了,就像出现幻觉一样。