我看到我可以“删除”一个不存在而不受惩罚的记录;但这其中有什么隐患吗?
如果最好先检查记录是否存在,是否有一些超快速的方法可以做到这一点?
IOW,有没有办法快速执行这个伪SQL:
if recordExists(table, rowval[s])
deleteRecord
?
一般来说,没有真正的理由在删除之前检查某些内容是否存在。SQL是一种基于集合的语言,删除一个空集合的元素是完全有效的
要检查是否存在某些内容需要查找,最坏的情况是,您必须再次执行相同的查找才能删除。唯一一种好的形式是,如果不满足条件,语句可能会导致错误(想到修改 DDL 的语句)
不,没有理由不使用普通的 DELETE 语句来删除可能存在或不存在的行:
DELETE FROM Table WHERE Id = 234
这将删除指定的行,或者不会。在前一种情况下,更新计数将为 1,而在后一种情况下,更新计数为 0。在记录确实存在的情况下,您可以使用它来执行任何其他逻辑。
只要您愿意在记录存在时接受 DELETE 操作,您就可以自由删除 - 记录与否。
补充一点,在“真实”查询之前执行存在性检查的另一个危险是,数据的可见版本可能会在查询之间发生变化,除非您采取了将读取一致性更改为可序列化的预防措施。