2017-08-01 6 views
0

私は50から60のデータベースを持つ共有サーバーを持っています。各データベースには200のテーブルがあります。MySQL - シングルアクションですべてのデータベースの列を変更する方法は?

手動で別のデータベースの代わりに既存のすべてのデータベースを1つのデータベースに追加するにはどうすればよいですか?

ALTER TABLE `users` ADD `a` VARCHAR(200) NULL; 
ALTER TABLE `users` ADD `b` VARCHAR(200) NULL; 
ALTER TABLE `users` ADD `c` VARCHAR(200) NULL; 
ALTER TABLE `users` ADD `d` VARCHAR(200) NULL; 
ALTER TABLE `users` ADD `e` VARCHAR(200) NULL; 
ALTER TABLE `users` ADD `f` VARCHAR(200) NULL; 
+0

本当にできません。 DBをテキストファイルにエクスポートしてアプリケーションコードで編集することもできますが、データセットが破損する可能性があります。そのため、バックアップするだけでこれを試みます。 – Strawberry

+1

200はかなり多くのテーブルです – Strawberry

答えて

1

同じ手順を作成できます。そして、プロシージャーでこのクエリーにカーソルを書くことができます。

select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='sampledata';

Dynamic Queryを使用して動的ALTER声明ください:

DELIMITER $$ 
CREATE PROCEDURE `SAMPLEPROCEDURE`(IN COLUMNNAME VARCHAR(40)) 
BEGIN 
DECLARE VAR_TABLENAME VARCHAR(100); 
DECLARE DONE INT; 

DECLARE CUR CURSOR FOR 
     SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'SAMPLEDATA'; 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE=1; 

SET DONE = 0; 
    OPEN CUR; 
    TABLELOOP: LOOP 
     FETCH CUR INTO VAR_TABLENAME; 
     IF DONE = 1 THEN LEAVE TABLELOOP; END IF; 
SET @VAR_ALTER_QUERY =CONCAT("ALTER TABLE ",VAR_TABLENAME," ADD ",COLUMNNAME," VARCHAR(200) NULL"); 

PREPARE STMT FROM @VAR_ALTER_QUERY; 
EXECUTE STMT; 
DEALLOCATE PREPARE STMT; 

    END LOOP TABLELOOP; 

END 

をあなたは同じのための基準として上記の手順かかったことができます。

1

use information_schema select case when table_schema is not null then CONCAT("USE ",TABLE_SCHEMA) end use_schema , CONCAT("Alter Table '", TABLE_SCHEMA,"'.'", TABLE_NAME, " Add 'a' varchar(200)") as MySQLCMD from TABLES where table_name = 'USERS';

ポイントは、各スキーマから各「ユーザー」テーブルを取得し、ALTERスクリプトを生成するために辞書スキーマを使用することができることです。

関連する問題