当多个事务以不受控制或不受限制的方式并发执行时,可能会导致多个问题。这些问题通常称为数据库环境中的并发问题。数据库中可能出现的五个并发问题是:
(i). Temporary Update Problem
(ii). Incorrect Summary Problem
(iii). Lost Update Problem
(iv). Unrepeatable Read Problem
(v). Phantom Read Problem
这些解释如下。
- 临时更新问题:
当一个事务更新项目并失败时,会出现临时更新或脏读问题。但是更新的项目在项目被更改或恢复到其最后一个值之前被另一个事务使用。例子:
在上面的例子中,如果事务 1 由于某种原因失败,那么 X 将恢复到其先前的值。但是事务 2 已经读取了错误的 X 值。
- 不正确的摘要问题:
考虑一种情况,其中一个事务正在对某些记录应用聚合函数,而另一个事务正在更新这些记录。聚合函数可能会在值更新之前计算一些值,而在更新后计算其他值。例子:
在上面的例子中,事务 2 正在计算一些记录的总和,而事务 1 正在更新它们。因此,聚合函数可能会在更新之前计算一些值,而在更新后计算其他值。
- 丢失更新问题:
在丢失更新问题中,事务对数据项所做的更新会丢失,因为它被另一个事务所做的更新覆盖。例子:
在上面的例子中,事务 1 更改了 X 的值,但它被事务 2 对 X 所做的更新覆盖。因此,事务 1 所做的更新丢失了。
- 不可重复读问题:
当同一事务的两个或多个读操作读取同一变量的不同值时,就会出现不可重复问题。例子:
在上面的例子中,一旦事务 2 读取了变量 X,事务 1 中的写操作就会改变变量 X 的值。因此,当事务 2 执行另一个读操作时,它读取 X 的新值,该值被更新交易 1.
- 幻读问题:
当事务读取一个变量一次,但当它再次尝试读取同一个变量时,会出现幻读问题,提示该变量不存在。例子:
在上面的例子中,一旦事务 2 读取了变量 X,事务 1 就会在事务 1 不知情的情况下删除变量 X。因此,当事务 2 尝试读取 X 时,它无法读取。