批量修改Mysql数据库表MyISAM为InnoDB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量修改Mysql数据库表MyISAM为InnoDB相关的知识,希望对你有一定的参考价值。


网上有这样一个方法:

1.查看当前数据引擎的命令:

  show engines;

2.

    USE `[DBNAME]`;

    SELECT GROUP_CONCAT(CONCAT( ‘ALTER TABLE ‘ ,TABLE_NAME ,‘ ENGINE=InnoDB; ‘) SEPARATOR ‘‘ )

    FROM information_schema.TABLES AS t

    WHERE TABLE_SCHEMA = ‘[DBNAME]‘ AND TABLE_TYPE = ‘BASE TABLE‘;

  将其中的红色部分替换为你所使用的数据库

   执行后其实生成的是查询命令,然后copy生产的命令,执行SQL 即可:

ALTER TABLE info_aaaa ENGINE=InnoDB; ALTER TABLE info_data_bbb ENGINE=InnoDB; ALTER TABLE info_data_ccc ENGINE=InnoDB; ALTER TABLE info_data_ddd ENGINE=InnoDB; ALTER TABLE info_data_eee ENGINE=InnoDB; ALTER TABLE info_data_fffENGINE=InnoDB;


再次查看数据表的数据引擎已经更改了:show table status from [DBNAME];


但是,生成的命令,只有一小部分,可能表太多了吧。


那就用下面这一句,在查询里,贴如下命令,将生成


SELECT concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘) FROM Information_schema.TABLES WHERE TABLE_SCHEMA = ‘jingzong‘ AND ENGINE = ‘MYISAM‘ AND TABLE_TYPE = ‘BASE TABLE‘


生成的语句是:


CREATE TABLE MY_TABLE (
  `concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)` VARCHAR
);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_admin ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_admin_panel ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_admin_role ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_admin_role_priv ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_announce ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_attachment ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_attachment_index ENGINE=InnoDB;‘);
INSERT INTO MY_TABLE(`concat(‘ALTER TABLE ‘, TABLE_NAME,‘ ENGINE=InnoDB;‘)`) VALUES (‘ALTER TABLE jz_badword ENGINE=InnoDB;‘);


全部语句是有了,但这一段,不好使用,

手动建一个文件,把没有用的去掉,批量查询...替换为‘‘, 

留下:ALTER TABLE jz_admin ENGINE=InnoDB;

这样的。

然后再贴到查询里,执行一遍就可以了。



----------  招募未来大神 -----------------------

如果您有利他之心,乐于帮助他人,乐于分享
如果您遇到php问题,百度且问了其他群之后仍没得到解答

欢迎加入,PHP技术问答群,QQ群:292626152

教学相长!帮助他人,自己也会得到提升!

为了珍惜每个人的宝贵时间,请大家不要闲聊!

愿我们互相帮助,共同进步!

加入时留言暗号,php,ajax,thinkphp,yii...


以上是关于批量修改Mysql数据库表MyISAM为InnoDB的主要内容,如果未能解决你的问题,请参考以下文章

mysql批量修改数据库表引擎

批量修改Mysql数据库表Innodb为MyISAN

MySQL QA

mysql 批量更换数据库表引擎 InnoDB 到 myISAM

mysql的存储类型以及索引

MySql两种存储引擎的区别