1
多くのテーブルを含むMySQLデータベースがありますが、そのうちのいくつかはソフトウェアによって動的に作成されます。動的表には一貫した命名規則があります。MySQLで動的に管理されたテーブルを削除する
dynamic_1
dynamic_2
...
ただし、これらの表がいくつあるかは必ずしもわかりません。
データベース全体を削除せずにこれらのダイナミックテーブルをすべて削除できるようにしたいと考えています。私は純粋にSQLでこれを行うことができるようにしたいと思います。 (ストアドプロシージャは正常です)これは可能ですか?
クイック補遺。
ハイムとアレクサンドルのソリューションは素晴らしいですが、私たちが逃した特別なケースが1つあります。動的表がない場合はどうなりますか?その場合、@v
はNULLになり、実行しようとするとエラーになります。私はこのケースを処理するために、第2の変数を追加しました:
SET @v = (SELECT CONCAT('drop table ', GROUP_CONCAT(a.table_name)) FROM information_schema.tables a where a.table_schema = DATABASE() AND a.table_name like 'dynamic_%');
SET @y = (SELECT IF (@V IS NOT NULL, @V, 'select 1'));
PREPARE s FROM @y;
EXECUTE s;
あなたは、おそらく追加する必要があります 'とa.table_schema = DATABASE()'だけを検索します現在のデータベース –
うわー、それは素晴らしいです。 (そして、そうです、a.table_schemaは便利です。)結果セットを変数に代入して同じスクリプトで実行することは可能ですか? – njudge
私はループでストアドプロシージャでのみ行うことができると思う –