4

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

我想改变这个表

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

我的意思是:

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

我怎样才能做到这一点 ?

谢谢

编辑 :

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

SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'tableprefix%'
4

5 回答 5

3

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

于 2010-07-15T07:49:15.123 回答
2

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

ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification]

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

于 2010-07-15T07:50:59.017 回答
2

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

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

于 2011-10-11T12:54:35.007 回答
1

根据您刚刚指定表名的文档,您将不得不编写一个循环。

于 2010-07-15T07:49:34.310 回答
0

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

就是这样。

于 2017-05-23T09:34:18.527 回答