有这样一个例子:
比如:A同学银行卡里有100块钱,要到银行往B同学的卡里转100,银行后台的数据操作流程可能是先给B同学卡里加100块钱,再从A同学卡里减100块钱。如果前半部分完成后,后半部分还没来得及执行,这个时候A同学给C同学卡里转100块钱,这时因为A同学卡里的钱还没减掉,所以是可以给C同学转账的。那这样就有问题了,A同学明明只有100块钱,却给两个同学B,C,各转了100块钱并且还成功了,这样银行就没法玩了。这时就要用到“事务”这个概念了。
简单地说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务是在引擎层实现的。我们知道MySQL不止有一个引擎,但是不是所有的引擎都支持事务,比如MySQL原生的MyISAM引擎就不支持事务,InnoDB是支持事务的。
事务的隔离性与隔离级别
事务的四大特性(ACID):
-
原子性(Atomicity)
原子性是指事务中包含的所有操作,要么全部成功,要么全部失败。
-
一致性(Consistency)
一致性是指事务必须使数据库从一个一致性的状态变成另一个一致性的状态。也就是一个事务执行之前和执行之后都必须处于一致性状态。
-
隔离性(Isolation)
隔离性是指一个事务的操作不能被其他事务干扰,多个事务之间互相隔离。
-
持久性(Durability)
持久性是指一个事务一旦被提交,那么对数据库中的数据的改变就是永久性的,接下来的操