このような文を使用して、1つの文で10個のレコードを含むテーブルを削除できますか?MySQLで正確に10行のテーブルを削除する
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
このような文を使用して、1つの文で10個のレコードを含むテーブルを削除できますか?MySQLで正確に10行のテーブルを削除する
.. DROP TABLE ... WHERE name IN
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10);
まず、INFORMATION_SCHEMA.TABLESのtable_rows
を信頼しないでください。それはの見積もりです。正確ではありません。どの瞬間に行を挿入または削除するコミットされていないトランザクションが存在する可能性があるので、どのように正確にすることができますか?表内の行数には、これらの変更が含まれる場合と含まれない場合があります。
第2に、DROP TABLE
ステートメントは、ドロップするテーブルの固定リストだけをサポートします。ここでhttp://dev.mysql.com/doc/refman/5.7/en/drop-table.htmlから構文のリファレンスです:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
この文はWHERE
句またはいずれかの条件をサポートしていません。テーブルには明示的に名前を付ける必要があります。
サポートされている構文を調べるには、ドキュメントを読む習慣を開発する必要があります。これは私がStack Overflowに関する質問に関して持っている最大の苦情です:あまりにも多くの人がリファレンスドキュメントを読み飛ばしています。もしここで質問の90%以上が不必要になるでしょう。
上記の@Barmarのコメントでは、削除するテーブルのリストをprepare a dynamic SQL statementとすることができます。
第3に、不確定なテーブルを削除することは非常に危険です。条件に一致するテーブルを見つけるコードのバグのために間違ったテーブルを削除することができます。これは、あなたが回復できないデータ損失の災害を作り出すことを確実にしています。私は決してテーブルの落としを「自動化」しません。
いいえいいえいいえいいえいいえいいえ – RiggsFolly
ストアドプロシージャに動的SQLを記述する必要があります。 – Barmar