2016-08-23 6 views
2

このような文を使用して、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); 
+0

いいえいいえいいえいいえいいえいいえ – RiggsFolly

+0

ストアドプロシージャに動的SQLを記述する必要があります。 – Barmar

答えて

2

まず、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に、不確定なテーブルを削除することは非常に危険です。条件に一致するテーブルを見つけるコードのバグのために間違ったテーブルを削除することができます。これは、あなたが回復できないデータ損失の災害を作り出すことを確実にしています。私は決してテーブルの落としを「自動化」しません。

関連する問題