什么是事务
事务是是数据库操作的最小的单元,它包含了一个或者多个操作命令,这些命令作为一个整体来执
行,要么一起成功要么一起失败,事务是不可在分的一个整体的操作集合。
事务具备的四大特性
- 原子性:事务是一个不可分割的整体,要么一起成功,要么一起失败。
- 一致性:事务的结果要使数据库从一个一致状态变为另一个一致状态。
- 隔离性:一个事务的操作不能干扰其他事务的执行,即一个事务的操作及其使用得到数据对其它并发操作是隔离的。
- 持久性:即一个事务一旦提交它对数据库的影响是持久的,后续的操作不应该对其结果造成影响。
数据库并发事务可能造成的影响:
- 脏读:当一个事务对数据进行修改但是还未提交,这时有另一个事务进行操作,读取到了这个数据并且还是用了这个数据。
- 不可重复读:一个事务对数据进行了两次连续的读取,但是在两次读取操作之间,有一个事务对数据进行了修改,造成了两次数据的不一致。
- 幻读:一个事务要读取某一范围内的数据,这时一个事务又插入了几条新的数据进来,当第一事务再次读取时会发现这些新加入的数据,就好像发生了幻觉一样。
- 丢失修改:一个事务对某一个数据进行了修改,这时另一个数据也对同一个数据进行了修改,第一个事务的修改的结果就丢失了。
不可重复读和幻读类似,但是不可重复读是其他事务对数据进行修改造成的,幻读是其他事务对
数据进行了删除或者插入造成的。
为了解决事务并发造成的问题,又有了事务隔离级别
事务的隔离级别:
- 读未提交:是最低的隔离级别,允许读取到未提交的数据,可导致脏读、幻读、不可重复读
- 读已提交:允许读取到已提交的数据,是大多数数据库的默认隔离级别,可导致幻读、不可重复读
- 可重复读:对同一数据读取的结果一致,是MySQL默认隔离级别。可以通过行级锁来实现该隔离级别。
- 串行化:是最高的隔离级别,让事务挨个逐个的执行,就不会导致任何问题的发生。