CREATE DEFINER=`root`@`%` PROCEDURE `test2`()
BEGIN
DECLARE _table_name varchar(50) ;
DECLARE _sql varchar(5000) DEFAULT '';
DECLARE Done INT DEFAULT 0;
DECLARE rs CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema='kingdom_db' ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
OPEN rs ;
FETCH NEXT FROM rs INTO _table_name;
REPEAT
IF NOT Done THEN
Set _sql = CONCAT(_sql,' ALTER TABLE ',_table_name,' ENGINE = INNODB;');
END IF;
FETCH NEXT FROM rs INTO _table_name;
UNTIL Done END REPEAT;
delete from `errors` ;
Insert into `errors` set `uid`=1, `data`= _sql;
CLOSE rs ;
END
BEGIN
DECLARE _table_name varchar(50) ;
DECLARE _sql varchar(5000) DEFAULT '';
DECLARE Done INT DEFAULT 0;
DECLARE rs CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema='kingdom_db' ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
OPEN rs ;
FETCH NEXT FROM rs INTO _table_name;
REPEAT
IF NOT Done THEN
Set _sql = CONCAT(_sql,' ALTER TABLE ',_table_name,' ENGINE = INNODB;');
END IF;
FETCH NEXT FROM rs INTO _table_name;
UNTIL Done END REPEAT;
delete from `errors` ;
Insert into `errors` set `uid`=1, `data`= _sql;
CLOSE rs ;
END
本文介绍了一种使用存储过程批量更改数据库中所有表的存储引擎为InnoDB的方法。通过定义游标遍历information_schema.tables并构造SQL语句,最终将更改记录到错误表中。
5771

被折叠的 条评论
为什么被折叠?



