概念
名词
-
ACID: 数据库系统中事务必须满足的性质, 分别是原子性(atomicity), 一致性(consistency), 隔离性(isolation), 持久性(durability).
- 原子性: 事务要么全部完成, 要么不完成, 不存在中间状态.
- 一致性: 系统状态是一致的, 正确的. 例如银行转账时账户的余额就是状态, 余额之和不变就是保证数据的一致性, 再比如要满足各种数据约束, 如唯一约束, 主键约束.
- 隔离性: 并发事务之间不会干扰, 可以同时进行读写, 而不会产生不一致的状态.
- 持久性: 事务完成后, 对数据的修改就是永久的, 不会发生丢失.
-
候选码: 是属性或多个属性的组合, 能唯一确定一行数据, 或者说由候选码能确定其他所有属性.
-
主码: 候选码可以有多个,其中选一个作为主码.
-
非主属性: 不在任何候选码中的属性是非主属性.
-
多值依赖: 一个属性能够确定一组属性的值的范围.
-
数据库恢复技术: 数据转储(多副本), 日志.
并发控制
事务是并发控制的基本单位。常见的错误如下所示:
- 丢失修改:两个事务A、B同时写一个数据,A的写使得B的写丢失,B再读取时得到的是A写入的值。
- 不可重复读:一个事务两次读取一个数据得到的结果不同,例如数据值不同、后一次要读的数据丢失、增多等。
- 读脏数据:事务读到不正确的数据。当事务A修改了数据,但是尚未提交,而事务B此时读到了修改的数据,此时如果A被回滚,B就发生了读脏数据。
不同数据库定义了不同的事务隔离级别,有下面几种,要求逐渐严格:
- 未提交读:允许事务读取其他事务没有提交的修改。能避免丢失修改问题。(写的时候允许读)
- 已提交读:只能读到其他事务已经提交的修改,避免了读脏数据问题。Oracle的默认级别。(写的时候不允许读)
- 可重复读:能避免部分不可重复读的问题,存在幻象读问题,例如下一次查询的结果比上一次多,是因为在之间有其他事务插入了数据。MySQL默认级别。ÿ