我有一个包含400多个表的大型MySQL数据库。几乎所有表都需要根据框架要求更改为InnoDB。
我正在运行以下查询以查看db的当前表引擎:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = 'DATABASE_NAME';
我创建了一个平面文件,其中包含所有表格的列表,其中包含正确的“ALTER TABLE”语法:
ALTER TABLE wishlist_item ENGINE=InnoDB;
...etc...
我使用以下语法运行此文件:
mysql -u USERNAME -pPASSWORD DATABASE_NAME < alter_staging_tables.txt
然而,当我跑步时:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = 'DATABASE_NAME';
尽管我的文件正在运行并且更改了引擎类型,它仍然将所有表显示为MyISAM。我甚至进去了,手动进行了一次改动:
mysql> ALTER TABLE zendesk ENGINE=InnoDB;
Query OK, 8 rows affected, 1 warning (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
但是当我选择时:
| zendesk | MyISAM |
它将表显示为MyISAM。我究竟做错了什么? TIA。
更新:MySQL版本:
mysql -v
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 306675
Server version: 5.0.77-log Source distribution
更新: 所以改变并不坚持:
mysql> ALTER TABLE zendesk ENGINE=InnoDB;
Query OK, 8 rows affected, 1 warning (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
mysql> show warnings;
+---------+------+-------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------+
| Warning | 1266 | Using storage engine MyISAM for table 'zendesk' |
+---------+------+-------------------------------------------------+
1 row in set (0.00 sec)
答案 0 :(得分:3)
您确定InnoDB已启用吗?您可以查看SHOW ENGINES。
请注意,默认情况下,MySQL只会忽略无法识别的ENGINE
指令,并发出警告(除非您设置了NO_ENGINE_SUBSTITUTION)。您的ALTER TABLE
命令确实发出了一个警告,可能是由于此:
mysql> ALTER TABLE zendesk ENGINE=InnoDB;
Query OK, 8 rows affected, 1 warning (0.00 sec)