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