并发操作

并发操作虽然可以改善系统的资源利用率和短事务的响应时间,但是在运行中必须对并发事务加以控制,否则会引发一些问题,SQL92 标准对这些情况进行了分类,以及提出了解决办法。
由于一个事务可能包含多个 SQL 语句,SQL 语句是顺序执行的。T1 和 T2 两个事务在一个数据库上并发执行,可能有如下类型的问题:
读“脏”数据(Dirty Read) 事务 T1 更新了一个数据,并且在 T1 提交或者回滚前,另外一个事务 T2 读取了那个数据。如果 T1 这个时候回滚,那么 T2 就读取了一个未提交的虚假的值,即“脏”数据。
不可重复读(Non-Repeatable 或 Fuzzy Read) 事务 T1 读取了一个数据。这个时候另外一个事务 T2 修改或 者删除了这个数据并且提交了。如果 T1 尝试再读取一次这个数据,就会发现再次读到的数据与之前不一致或不存在。
幻象读(Phantom Read) 事务 T1 读取了若干个满足某个查询条件的数据。这个时候事务 T2 创建了一个数据恰好也满足 T1 的这个查询条件。如果这个时候 T1 再次根据这个查询条件进行读取,它会发现会多出了部分数据。
很显然,高并发度带来了数据的不一致,这些情况一些是用户不愿意见到,一些则是无法接受的。用户需要在高并发带来的高性能和数据的一致性之间做取舍。SQL92 标准提出了事务隔离级别,来解决上面的问题。

posted @ 2022-05-21 10:16  je_ck  阅读(170)  评论(0)    收藏  举报