代码之家  ›  专栏  ›  技术社区  ›  Haim Evgi

在mysql中一次改变多个表的简单方法

  •  4
  • Haim Evgi  · 技术社区  · 14 年前

    我有很多以前缀开头的表,

    实现这一点的简单方法是什么(而是遍历所有表)

    我的意思是:

    ALTER TABLE  LIKE tablenameprefix% ADD INDEX `NewIndex1` (`field`);
    

    谢谢

    我可以做一种不在存储过程中的循环吗?

    SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'tableprefix%'
    
    5 回复  |  直到 14 年前
        1
  •  3
  •   Adrian Grigore    14 年前

    你不能。不过,您可以编写一个存储过程来枚举查找前缀的所有表,并执行必要的更改。

        2
  •  2
  •   Anax    14 年前

    鉴于此 ALTER TABLE

    ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification]
    

    链接: http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

        3
  •  2
  •   random    12 年前

    当我想将multiple table的引擎从MyISAM改为InnoDB时,我没有编写循环,而是做了一个完整的DB转储并在文本编辑器中打开它。在文本编辑器中,我只是简单地将所有MyISAM单词更改为InnoDB。

    我知道这不是一个合适的解决方案,但对我来说,写一个程序就容易多了。

        4
  •  1
  •   Dennis Haarbrink    14 年前

    你必须写一个循环,根据 documentation

        5
  •  0
  •   Zhang Buzz    7 年前

    我犯了一个愚蠢的错误,将所有Wordpress表与我的产品表放在一起,幸运的是所有Wordpress表都以wp\前缀开头,而我的所有其他产品表都没有这个wp\前缀。

    我创建了另一个名为wordpress的数据库,现在我要将所有以wp\开头的表移到该数据库中。

    SELECT CONCAT('ALTER TABLE olddb.', table_name, ' RENAME wordpress.', table_name, ';')
      FROM information_schema.tables
      WHERE table_schema='olddb' AND table_name LIKE 'wp%'
      INTO OUTFILE '/tmp/move_to_wordpress';
    SOURCE /tmp/move_to_wordpress;
    

    就这样。