做学问马虎不得啊。
ACID Properties
ACID属性
事务可以由四个基本性质来定义,简记为首字母缩写:ACID(原子性 atomicity、一致性 consistency、隔离性 isolation、持久性 durability)。
Atomicity
原子性
原子性保证了要么所有更新都已完成,要么全部都未发生。由于事务保证的原子性,你不需要亲自编写代码来处理诸如一些已更新完成,其他却失败了的状况。
对照刚才的关于课程安排的例子,如果从第一个课程的名单里移除此学生成功,但是添加他到第二个课程的名单时失败,那么事务就会中止,并且此学生最终不会被从第一个课程中的名单移除。
Consistency
一致性
一致性意味着事务结束后系统的数据依然保证一致。在事务开始之前,数据保持有效的状态,事务结束后也如此。
一致性可以用讨论原子性时的同样情形,即把一个学生从一个课程转移到另一个来描述。如果把学生从第一个课程移除失败,但是添加到第二个课程成功,那么这个学生将被同时登记在两个课程上。这是不合法的情形,数据库的数据将不能保持一致。一致性表
示,事务的结果必须使数据库仍保持数据一致的状态。所以事务的部分操作失败的话,所有其他部分也要回到原先的状态,就象什么都没发生一样。
Isolation
隔离性
多个用户可能同时对同一个数据库进行操作。隔离性保证了在事务完成之前,该事务外部不能看到事务里的数据的改变。也不能访问一些中间状态,因为假如事务终止的话,这些状态将永远不会发生。
如果你做一个查询来获取所有课程的学生名单,与此同时,一个事务正在运行,把一个学生从一个课程转移到另外一个,那么两个课程的名单上都不会出现这个学生。隔离性保证了事务外无法看到事务内的任何中间状态或结果。
Durability
持久性
持久性意味着即便是系统当机也能保证一致性的状态。如果一个数据库系统当机,它必须保证已完成的事务确实已经写入数据库。
---面试前脑子中还迸出这个问题,结果人家真的问到了,运气好,运气差。