2016-04-05 19 views
2

私は100以上のテーブルを持つデータベースを持っています。約20人の特定の列、たとえばcolumn1があります。すべてのテーブルから行を削除

各テーブルを指定せずに、すべてのテーブル、where column1="abc"の行を削除できますか?

DELETE FROM [all tables] WHERE column1 = 'abc'; 
+0

ディナミッククエリを作成する必要があります。 'information_schema'を使って' column1'を使ってテーブルを取得 –

+0

情報スキーマを照会し、問題の行を持つテーブル名を取得し、クエリを構築します。このクエリを複数回実行する必要がない限り、これを実行する必要はありません。 –

答えて

4

最も簡単な方法は、以下のことがあります

SELECT 
CONCAT('DELETE FROM ',TABLE_NAME," WHERE column1 = 'abc';") comd 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' 
AND COLUMN_NAME ='column1'; 

このクエリでは、以下のように出力されます

DELETE FROM TABLE_1 WHERE column1 = 'abc'; 
DELETE FROM TABLE_2 WHERE column1 = 'abc'; 
DELETE FROM TABLE_3 WHERE column1 = 'abc'; 
DELETE FROM TABLE_4 WHERE column1 = 'abc'; 
. 
. 
. 

は現在、これらのDELETEのコマンドをコピーして、すべてを実行します。


注:他の方法で 、あなたはprepare statementを通じて実行コマンド/クエリにこれらのgenerated command stringsを回すことができます格納されたプログラムを書くことができます。

しかし、複雑さを回避するために私が上記で提案した最も簡単な方法を好むことができます。

+0

いいえ、間違いはありません。特定のエントリが存在しない場合、削除するものはありません。それはただ静かに走ります。 – 1000111

0

がvariebleを反復処理するためにカーソルを作成します。

は、だから私はこのようなものが必要。 1.テーブルのリストを選択できます。SHOWテーブル---->変数へ 2.カーソルを作成しますhttp://www.mysqltutorial.org/mysql-cursor/ 3.必要なコードでカーソルを実行します。

よろしくお願いいたします。