修改数据 / 删除行 |
DELETE FROM customer WHERE company = 'Druid Cyclery';
由于被测试的列没有唯一约束,因此此语句可能删除多行。(Druid Cyclery 可能有两个商店,两个商店的名称相同但客户编号不一样。)
SELECT COUNT(*) FROM customer WHERE company = 'Druid Cyclery';
您还可选择这些行并显示它们,以确保它们是您想要删除的那些行。
在这短短的时间间隔内,虽然其他用户不太可能执行这些操作,但确实存在这种可能性。相同的问题也影响 UPDATE 语句。在 并发和锁定 之下讨论解决此问题的方法,且在 对多用户环境编程 中讨论得更详细。
您可能遇到的另一个问题是,在该语句完成之前出现硬件或软件故障。在此情况下,数据库可能还没删除行,可能已删除了一些行,或已经删除了所有指定的行。数据库的状态未知,这是我们不想看到的。要防止此情况,请使用事务日志记录,如 中断了的修改 讨论的那样。