0

MySQL クエリ

 delete from t where not condition;

 create table s select * from t where condition;
 drop table t;

は非常に似ています。(ここでcondition、1 つのクエリは他のクエリと同じconditionです。)
2 番目の方法の利点の 1 つは、をs削除する前に調べtて、クエリに問題がないことを確認できることです。これは非常に重要な考慮事項であり、私はそれを最小限に抑えたくありませんが、上記のクエリのいずれかに対して他にどのような長所と短所が存在するのか疑問に思っています.

4

2 に答える 2

1

最初のものははるかに優れているため、SQL には削除コマンドが存在します。削除コマンドを再発明する必要はありません:

1-一部の行を削除する場合、スキーマを変更する(create s、drop t) 必要はありません。

2-保持したい他のテーブルとの関係がある場合があります。削除をカスケードして、他のテーブルの他の依存行を削除したり、削除時にトリガーを使用したりすることもできます...

3-あなたが言及した削除する前に行をチェックする利点については、削除コマンドを使用する前に選択を行うこともできます。

4-テーブルには、他のアプリロジックへのリンクがある場合があります。たとえば、ORM クラス、レポート用の SP などです。コードで新しいクラスを作成するか、いくつかの行を削除するたびに既存の SP を更新しますか? ?

于 2013-03-06T18:10:39.873 に答える
1

2 番目のクエリについては、任意のデータベースに一時テーブルを作成するたびに、テーブルスペースが最適化され、データベースのパフォーマンスが低下します。2 番目のアプローチに従わないことを強くお勧めします。

自分が何をしているのかを完全に確認したい場合は、次のコードのようなものを使用できます。

/*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

返された行が削除したいものであることが確実な場合は、次のように、最初の行のコメントの開始を簡単にコメントできます。

-- /*
DELETE
-- */ SELECT *
FROM t
WHERE condition;

DELETEステートメントを実行する前に、同じアプローチを使用します。

于 2013-03-06T18:09:37.960 に答える