软考数据库---1.事务管理-1.2 数据库的并发控制

时间:2024-04-12 20:29:53

1.2.1 事务调度概念

调度:事务的执行次序。

串行调度:多个事务依次串行执行,且只有当一个事务的所有操作都执行完后才执行另一个事务的所有操作。
并行调度:利用分时的方法同时处理多个事务。

调度错误的定义是结果算错了才叫错,并行的结果要和任意串行结果一致。—>可串行化的调度
多个事务的并发执行是正确的, 当且仅当其结果与某一次序串行地执行它们的结果相同, 称这种调度策略是可串行化的调度。
可串行性是并发事务正确性的准则。 即: 一个给定的并发调度, 当且仅当它是可串行化的才认为是正确调度

错误的调度及产生错误的原因:丢失修改/不可重复读/读脏数,破坏了事务的隔离性

1.2.2 并发操作带来的问题

丢失修改、不可重复读、读脏数据,幻读。
幻读是按照相同条件查询,两次查到不一样。
不可重复读是两个查询同数据,读取数据不一样。
都是违反了隔离性

1.2.3 并发控制技术

*(X锁、S锁)、三级*协议、两阶段*协议。
X锁(排它锁):工作类流程和串行调度一样
S锁(共享锁):只读不改
三级*协议:
在这里插入图片描述
两阶段*协议:
在这里插入图片描述
加锁阶段(Growing Phase):事务开始后,可以对任何数据项加锁(读锁或写锁),但不能释放任何锁。
解锁阶段(Shrinking Phase):事务提交(COMMIT)时,释放所有锁;事务回滚(ROLLBACK)时,也必须释放已获取的所有锁。
满足两段锁协议—>可串行化—>并发事务正确执行–x->不能保证不发生死锁

1.2.4 隔离级别:

1、READ UNCOMMITTED(读未提交):可避免丢失修改。
2、READ COMMITTED<读已提交):可避免丢失修改、读脏数据。
3、REPEATABLE READ(可重复读):可避免丢失修改、读脏数据,不可重复读。
4、SERIALIZABLE(串行化):*别,可避免丢失修改、读脏数据、不可重复读、幻读。

幻读:事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的N条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+W条数据了,就产生了幻读。