代码之家  ›  专栏  ›  技术社区  ›  user285594

MySQL-如何通过一个操作改变所有数据库上的列?

  •  0
  • user285594  · 技术社区  · 8 年前

    我有一个共享服务器,其中有50到60个数据库,每个数据库有200个表。

    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;
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   halfer Jatin Pandey    8 年前

    您可以为其创建过程。在这个过程中,你们可以在这个查询上写下游标。

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

    使动态 ALTER 语句使用 Dynamic Query

    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
    

        2
  •  0
  •   Alexandru    8 年前

    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脚本。