【Mysql】事务的四种特性和隔离级别
四种特性:
原子性(Atomicity):事务里所有操作视为一个整理,要么全部完成,要么全回滚。
一致性(Consistency):操作前后,数据库内数据逻辑上一致。比如:1w元转账给不同的人,转出去的和应该等于1w元,余额应该是0.
隔离性(Isolation):事务彼此之间应当互不干扰,互不感知。
持久性(Durability):对数据库的操作是一旦提交(即使数据库出现故障,也应完成这次提交),在下一次事务操作数据前不会改变。
事务的隔离级别:
个人感觉可以对应事务的安全级别来理解:
1.Read uncommitted (读未提交)——无隔离时,脏读可发生:脏读是指事务a访问到事务b未提交的数据,随后事务b回滚,事务a却使用未提交数据继续执行。
2.Read committed (读已提交)——因事务提交后其诗句才可读,所以不可脏读,但不可重复读问题依然可发生:在一个事务多次读取同个数据的时候,因为另一个事务的提交导致数据变化,前后读取的数据不一致。
3。Repeatable read (可重复读)——此级别可避免脏读和不可重复读的问题,但可能发生虚读问题:比如a=1,事务1将其改成2,事务2访问到a=2,开始进行操作,此时事务3把a改回1.事务2操作结束发现a=1。
4.erializable (串行化):事务之间串行执行,可避免脏读、不可重复读、虚读的发生。
四种隔离级别下的性能一次下降。多数情况下在读已提交隔离级别下操作就可以了。
在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。