【问题标题】:search simple way to alter multi tables in one time in mysql在mysql中搜索一次更改多个表的简单方法
【发布时间】:2010-07-15 07:44:30
【问题描述】:

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

我想改变这个表

执行此操作的简单方法是什么(而不是遍历所有表)

我的意思是:

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

我该怎么做?

谢谢

编辑:

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

中选择表的名称
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'tableprefix%'

【问题讨论】:

    标签: mysql alter-table


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      鉴于ALTER TABLE 语法不允许多个表名,您不能这样做。您需要依次遍历所有表:

      ALTER [IGNORE] TABLE tbl_name
      alter_specification [, alter_specification]
      

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

      【讨论】:

        【解决方案3】:

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

        我知道这不是正确的解决方案,但对我来说,为此编写例程更容易。

        【讨论】:

          【解决方案4】:

          你要写一个循环,根据documentation你只需指定表名。

          【讨论】:

            【解决方案5】:

            我犯了一个愚蠢的错误,将所有 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;
            

            就是这样。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-02-14
              • 2013-05-28
              • 1970-01-01
              • 1970-01-01
              • 2011-02-13
              • 2012-05-23
              • 2013-06-16
              相关资源
              最近更新 更多