ACID
原子性
要不全部成功,要不全部失败
一致性
我们的操作对数据库来说是从一个一致性状态编程另外一个一致性状态,不会出现说中间状态不一致的情况
隔离性
我们并行执行的事务之间必须是相互隔离的不能够相互干扰的
持续性
如果事务一旦提交,那么他对数据库的修改是永久性的。
如果 A 向 B 转账,先把 A 的钱扣掉,在把 B 的钱增加,那么这个时候它是一个完整的事务。不可能出现 A 的钱扣掉,B
没有收到钱的情况。那我们认为它是不一致的。在事务里边,它是必须要满足一致性。
当我们的系统故障导致的一些问题,它的执行结果它是不会收到任何影响的。这是事务的四个特性
事务并发问题
脏读
事务 A 读取了 事务 B 提交的数据,但是事务 B 回滚了。
不可重复度
事务A在多次读取同一条数据的时候,如果事务 B 在事务 A 读取数据的过程中对数据做了一个过呢更新,并且提交,导致 A多次读取的结果是不一致的,
幻读
事务在并发访问执行的情况下,它会有一个事务并发的问题,
幻读1
幻读2
不可重复读和幻读有相似的点,
不可重复度侧重的是修改
幻读侧重的是新增和删除
SQL 的标准定义了四种隔离级别
限定了事务的操作哪些情况下是可见的,哪些情况下是不可见的。我们通过约束解决我们所存在的问题。
隔离级别
就像我们讲过的,栅栏、屏障,隔离就是隔离开我们事务的影响
隔离级别越高的话,安全性越高,但是它的并发行越低,如果反之的话,并发行越高,数据安全性越低。
以 Mysql 为例四种隔离级别
read uncommitted
读取未提交的数据(脏读,很少使用)