版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fenghuangjc/article/details/82817787
数据库事务四特性
原子
全部成功,或者全部失败
一致
比如:A和B的钱是1000元,无论他们之间如何转,总数还是1000元
隔离
当多个用户并发访问数据库,如操作同一表,数据库为每个用户单独开启事务,不能被其它事务的操作干扰,多个并发事务之间要互相隔离。
持久
事务一旦被提交,那么对数据库的数据改变是永久的,即使数据库系统故障也不会丢失提交事务的操作。
并发操作几个问题
脏读
事务处理时读取了另一个未提交的事务的数据。
如B的余额为0元,A转账给B一万元,但是还没有提交成功。这时候,B手机支付一万元,读取到A转账的一万元,并进行了扣款。读到的一万元就是脏数据。因为A可能会撤销转账操作。
不可重复读
事务多次查询某数据但是返回值不同。因为在查询间隔期间,改数据被其它事务修改了。
幻读
发生于事务非独立执行。如一个数据值原为2,A对某数据复制为1,B又对其赋值为2,A再次查看改数据时,发现还是为2。
四种隔离
数据库事务隔离有四种
未提交读
可以读取到未提交的数据,会产生脏读。
提交读
一个事务提交后,其余事务才会读取到该事务的数据
重复读
开始读取数据(事务开启)时,不再允许修改操作。MySQL默认是这种。
序列化
是最高的事务隔离级别,事务串行化执行,可以避免脏读、不可重复读与幻读。但是这种效率低下,比较消耗数据库内存性能,一般不使用。