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