SQL の設計者が、 Where句を持たないUpdateまたはDeleteステートメントにキーワード (たとえば " All ") を必要としなかったのはなぜですか? それは彼らの側の単なる見落としでしたか?彼らがそうしていたら、彼らは(仕事は言うまでもなく!)多くの悲しみを救ったでしょう!
11 に答える
この間違いを犯した後、私は宗教的にタイプする習慣を身につけました
BEGIN TRANSACTION;
-- Select Blah
-- Some Sql here that changes Blah
-- Select Blah
ROLLBACK TRANSACTION;
次にそれを実行し、影響を受ける行数が正常に見えることを確認し、Sqlをもう少し見つめてから、置き換えROLLBACK
てCOMMIT
実行します。
UPDATE...FROM
余分に 15 秒しかかからず、特に複雑なタイプのクエリの場合は、胸焼けをする必要がありません。
ALL
そして確かに、このような混乱を防ぐためのキーワードか何かがあったはずです。または、Sql クエリ環境に組み込まれているオプションで、指がけいれんして Taco Bell で画面をダブル パンチしたときにレジのように機能します。
SQL データを破損する非常に簡単な方法は他にもたくさんあるため、それらのいずれかを見つけようとするのは時間の無駄です。WHERE のない UPDATE も同様に悪い (おそらくもっと悪い)。複数のテーブルを結合する SELECT で句を 1 つまたは 2 つ省略すると、コンソールに 1 行、1 兆ではなく、出力される可能性があります。
可能であれば、複製されたスレーブで作業します。それができない場合は、更新によってすぐに破損しないバックアップが利用可能であることを確認してください。また、UPDATE または DELETE クエリを入力するときは、ゆっくりと慎重に入力し、最後のセミコロンを入力する前に常に数秒間見つめてください。
大量の IT 要素は、ユーザーが最後に作成され、開発の容易さが最初に作成されました。Sql は素晴らしい例です。これは機能しますが、多くの (自明な) 簡単なことは困難です。しかし、すべてのデータを簡単に削除できるなど、難しいこともあります。私はそれを設計上の欠陥と見なしています。
同じ理由で、C で free に一致せずに malloc を持つことができます。それはあなたの責任です。
理由もわかりません。
彼らがそうしてくれたらいいのにと思います。すべてを更新したり、すべてを削除したいときは、わざわざ WHERE 1 = 1 と書く必要があります。
もちろん、それは書いたManojを救うことはできなかったでしょう
DELETE FROM T2
FROM Tbl T1, Tbl T2
WHERE T1.TopLevelId = 'value'
すべてのレコードを削除する必要があり、すべてを更新する必要があるケースはほとんど見たことがありません。私はいつもそれを設計上の欠陥と考えてきました。
マーフィーは次のように述べています。「すべて」は単なる別のケースです。
しかし、実際の問題は、「ライブ」データの安全性です。「ライブ」データベースでテストされていないスクリプトを実行すると、問題が発生します。