中断了的修改

即使所有软件都没有错误且所有硬件都完全可靠,计算机外部的世界也可干扰它。闪电可能击中建筑物,中断供电并在您的 UPDATE 语句运行期间停止计算机。当磁盘已满或用户提供不正确的数据时,更可能发生的情景是,导致您的多行插入过早停止并产生错误。在任何情况下,每当您修改数据,您必须假设某种不可预测的事件可中断该修改。

当外部原因导致修改中断时,您不可确定该操作完成了多少。即使在单行操作中,您也不可知道是否正确地更新了到达了磁盘的数据或索引。

如果多行修改是一个问题,则多语句修改就更糟。通常在程序中嵌入它们,因此您看不到正在执行的个别 SQL 语句。例如,要在演示数据库中输入新的订单,请执行下列步骤:
  1. orders 表中插入一行。(此插入生成一个订单编号。)
  2. 对于订购的每一商品,在 items 表中插入一行。

存在两种编制订单输入应用程序的方法。一种方法是使它完全是交互的,以便程序立即插入第一行,然后在用户输入时插入每一商品。但这种方法使得操作可能遭遇许多更不可预测的事件:客户的电话电线,用户按错键,用户的终端或计算机断电,等等。

下列列表描述构建订单输入应用程序的正确方法:
  • 以交互方式接受所有数据。
  • 验证数据并展开它(例如,在 stockmanufact 中查找代码)。
  • 在屏幕上显示信息以进行检查。
  • 等待操作人员进行最终的提交。
  • 快速地执行插入。

即使使用这些步骤,不可预测的情况还可在它插入该订单之后,但在它完成插入商品之前停止该程序。如果发生那种情况,则数据库处于不可预测的状态:它的数据完整性受到损害。