Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除Oracle中不存在的记录是否被认为是不好的形式?_C#_Sql_Winforms_Oracle - Fatal编程技术网

C# 删除Oracle中不存在的记录是否被认为是不好的形式?

C# 删除Oracle中不存在的记录是否被认为是不好的形式?,c#,sql,winforms,oracle,C#,Sql,Winforms,Oracle,我看到我可以删除一个不存在的记录而不受惩罚;但这里面有什么隐患吗? 如果最好先检查一下记录是否存在,有没有超快速的方法 瞧,有没有一种方法可以快速执行这个伪SQL: if recordExists(table, rowval[s]) deleteRecord ?否,没有理由不使用正常的DELETE语句删除可能存在或不存在的行: DELETE FROM Table WHERE Id = 234 这将删除指定的行,或者不删除。在前一种情况下,更新计数将为1,在后一种情况下,更新计数将为0。在

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

如果最好先检查一下记录是否存在,有没有超快速的方法

瞧,有没有一种方法可以快速执行这个伪SQL:

if recordExists(table, rowval[s])
  deleteRecord

否,没有理由不使用正常的DELETE语句删除可能存在或不存在的行:

DELETE FROM Table WHERE Id = 234

这将删除指定的行,或者不删除。在前一种情况下,更新计数将为1,在后一种情况下,更新计数将为0。在记录确实存在的情况下,您可以使用此命令执行任何附加逻辑。

否,没有理由不使用正常的DELETE语句删除可能存在或不存在的行:

DELETE FROM Table WHERE Id = 234

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

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


要检查某个内容是否存在,需要进行查找,最坏的情况是,您必须再次执行相同的查找才能删除。这是一种好的形式,唯一的一次是当您想到修改DDL的语句时,如果条件不满足,语句可能会导致错误。通常,在删除它之前,没有真正的理由检查它是否存在。SQL是一种基于集合的语言,删除空集合的元素是完全有效的


要检查某个内容是否存在,需要进行查找,最坏的情况是,您必须再次执行相同的查找才能删除。只有当条件不满足时,语句才有可能导致错误。只要您愿意接受删除操作,只要记录存在,您就可以随意删除记录或不删除记录。

只要您愿意接受删除操作,就会想到修改DDL的语句。

操作如果记录存在,您可以随意删除-记录或不记录。

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

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

建议:开始交易;删去检查目标表中受影响的行数—删除零行可能表示应用程序错误?;测试其他影响触发器或外键的引用触发操作是否会导致其他表受到影响?是否发生了错误?;如果一切正常,则提交事务。建议:开始事务;删去检查目标表中受影响的行数—删除零行可能表示应用程序错误?;测试其他影响触发器或外键的引用触发操作是否会导致其他表受到影响?是否发生了错误?;如果一切正常,则提交事务。