1

我看到我可以“删除”一个不存在而不受惩罚的记录;但这其中有什么隐患吗?

如果最好先检查记录是否存在,是否有一些超快速的方法可以做到这一点?

IOW,有没有办法快速执行这个伪SQL:

if recordExists(table, rowval[s])
  deleteRecord

?

4

4 回答 4

6

一般来说,没有真正的理由在删除之前检查某些内容是否存在。SQL是一种基于集合的语言,删除一个空集合的元素是完全有效的

要检查是否存在某些内容需要查找,最坏的情况是,您必须再次执行相同的查找才能删除。唯一一种好的形式是,如果不满足条件,语句可能会导致错误(想到修改 DDL 的语句)

于 2012-04-24T00:00:28.500 回答
4

不,没有理由不使用普通的 DELETE 语句来删除可能存在或不存在的行:

DELETE FROM Table WHERE Id = 234

这将删除指定的行,或者不会。在前一种情况下,更新计数将为 1,而在后一种情况下,更新计数为 0。在记录确实存在的情况下,您可以使用它来执行任何其他逻辑。

于 2012-04-24T00:00:10.963 回答
1

只要您愿意在记录存在时接受 DELETE 操作,您就可以自由删除 - 记录与否。

于 2012-04-24T00:01:08.867 回答
1

补充一点,在“真实”查询之前执行存在性检查的另一个危险是,数据的可见版本可能会在查询之间发生变化,除非您采取了将读取一致性更改为可序列化的预防措施。

于 2012-04-25T20:37:10.467 回答