DROP TABLE (
SELECT table_name
FROM information_schema.`TABLES`
WHERE table_schema = 'myDatabase' AND table_name LIKE BINARY 'del%');
私はこれが機能しないことを知っています! SQLでこのようなものと同等のものは何ですか?これを行うための簡単なPythonスクリプトを作成できますが、SQLで直接何かできるかどうか疑問に思っていました。MySQLを使用しています。ありがとうございます!
準備済みステートメント -を使用できます
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name,'`') INTO @tables FROM information_schema.tables
WHERE table_schema = 'myDatabase' AND table_name LIKE BINARY 'del%';
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
このようなステートメントを生成して実行します-
DROP TABLE myDatabase.del1, myDatabase.del2, myDatabase.del3;
@ Devart's answer のマイナーな改善:
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.`', table_name, '`') INTO @tables FROM
(select * from
information_schema.tables
WHERE table_schema = 'myDatabase' AND table_name LIKE 'del%'
LIMIT 10) TT;
SET @tables = CONCAT('DROP TABLE ', @tables);
select @tables;
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
このスクリプトは、コンソールの出力がNULL
になるまで繰り返し実行する必要があります
変更点は次のとおりです。
LIMIT
を追加しましたselect @tables;
)スクリプトの実行を停止するタイミングを制御する純粋なSQLではないため、この質問に直接答えないため、テーブルの束をすばやく削除する必要がある場合は、1行のシェルコマンドで実行できます。
echo "show tables like 'fsm%'" | mysql | tail +2 | while read t; do echo "drop table \`$t\`;"; done | mysql
クエリに一致するテーブルがない場合にエラーを生成しないように、DevartのソリューションにIFNULLを追加すると便利だと思いました。
SET @tables = IFNULL(CONCAT('DROP TABLE ', @tables),'SELECT NULL;');