删除 Oracle 中不存在的记录是否被视为不良形式?

本文关键字:不良 是否 Oracle 不存在 记录 删除 | 更新日期: 2023-09-27 18:32:06

我看到我可以"删除"不存在的记录而不受惩罚;但这有什么隐患吗?

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

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

if recordExists(table, rowval[s])
  deleteRecord

删除 Oracle 中不存在的记录是否被视为不良形式?

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

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

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

DELETE FROM Table WHERE Id = 234

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

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

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