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

追加するだけで、「実際の」クエリの前に存在チェックを実行することのもう1つの危険は、読み取りの一貫性をシリアライズ可能に変更する予防策を講じていない限り、データの可視バージョンがクエリ間で変更される可能性があることです。

于 2012-04-25T20:37:10.467 に答える