《高性能MySql》摘抄

database

1.3.事务

事务,有ACID的概念:

  • atomic 原子性
  • consistency 一致性
  • isolation 隔离性
  • durability 持久性

  1. 原子性

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

  1. 一致性

数据库总是从一个一致性的状态转换到另一个一致性的状态。因为事务最终没有提交,所以事务中所作的修改也不会保存到数据库中。

  1. 隔离性

通常来说,一个事务所作的修改在最终提交之前,对其它事务是不可见的。

  1. 持久性

一旦事务提交,则其所作的修改就会永久保存到数据库中。

这里的记忆方式是:事务是酸的。 Transaction is acid. 然后记忆 A代表 Atomic C 代表 consistency I 代表 isolation D代表 durability。然后对应ACID进行记忆,原子性——原子;一致性——能量守恒定律;隔离性——薛定谔猫;持久性——不可逆反应。

1.3.1.隔离级别

隔离级别里说了很多,但核心的还是对于几种问题的处理。

  • 脏读:事务中的修改,即使没有提交,对其它事务也都是可见的。(好像信纸上写字,写了一半,墨水还没干,另一个人就着急拿过来看,墨水在信纸上流淌,很脏)

  • 幻读:当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。(我们要把所有桌子上的苹果换西瓜,换完了发现,有一个人又拿来了一个苹果,放在了桌子上。)

  • 不可重复读:不可重复读,是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。(我们要桌子上第二个苹果,我们拿起来擦了擦,放在桌子上,这时候一个人吃了一口,我们又要第二个苹果时,发现被咬了一口。)

拓展阅读:脏读、幻读、不可重复读

然后,解释清了这些名词,我们理解下面这张表即可:

隔离级别

脏读可能性

不可重复读可能性

幻读可能性

每一行数据都上锁

READ UNCOMMITTED(未提交读)

Yes

Yes

Yes

No

READ COMMITTED(提交读)

No

Yes

Yes

No

REPEATABLE READ(可重复读)

No

No

Yes

No

SERIALIZABLE(串行化)

No

No

No

Yes

顺带说一句,MySQL默认事务隔离级别为可重复读。InnoDB存储引擎通过多版本并发控制解决了幻读问题。

1.3.2.死锁

以上是 《高性能MySql》摘抄 的全部内容, 来源链接: utcz.com/z/534248.html

回到顶部