本文来给大家介绍下MySQL中的隔离级别,事务是应用程序中一系列严谨的操作,所有的操作必须是成功完成的。否则在每个操作中所做的所有事情都会被撤销。
关键字 | 作用 |
---|---|
原子性 | 要不全部成功,要不全部失败 |
一致性 | 我们的操作对数据库来说是从一个一致性状态编程另外一个一致性状态,不会出现说中间状态不一致的情况 |
隔离性 | 我们并行执行的事务之间必须是相互隔离的不能够相互干扰的 |
持续性 | 如果事务一旦提交,那么他对数据库的修改是永久性的 |
当我们的系统故障导致的一些问题,它的执行结果它是不会收到任何影响的。这是事务的四个特性。
事务 A 读取了 事务 B 提交的数据,但是事务 B 回滚了。
事务A在多次读取同一条数据的时候,如果事务 B 在事务 A 读取数据的过程中对数据做了一个过呢更新,并且提交,导致 A 多次读取的结果是不一致的,
事务在并发访问执行的情况下,它会有一个事务并发的问题。 幻读1
幻读2
不可重复读和幻读有相似的点:
SQL 的标准定义了四种隔离级别 限定了事务的操作哪些情况下是可见的,哪些情况下是不可见的。我们通过约束解决我们所存在的问题。
就像我们讲过的,栅栏、屏障,隔离就是隔离开我们事务的影响
隔离级别越高的话,安全性越高,但是它的并发行越低,如果反之的话,并发行越高,数据安全性越低。 以 Mysql 为例四种隔离级别
隔离级别 | 说明 |
---|---|
read uncommitted | 读取未提交的数据(脏读,很少使用) |
read committed | 读取已经提交的数据(解决了脏读,出现不可重复读) |
repeateable read(Mysql 默认) | 可重复读(Mysql 默认,为了保证数据库在并发访问的时候,会看到相同的数据行,就会出现(幻读),我们一般通过 innoDb 里边的共享锁和独占锁,还可以通过多版本的并发控制 MVCC 的机制) |
Serializable | 串行化:严格按照顺序,事务来了乖乖排队,事务的执行,事务在执行的时候,另一个就先挂起,只能等到一个事务结束,另一个才能开启。性能会减低。 |