2011-10-10 81 views
2

我有一個超過400個表的大型MySQL數據庫。幾乎所有的表都需要根據框架要求更改爲InnoDB。MySQL表引擎沒有被更新(或更新沒有被反映)

我運行下面的查詢來查看數據庫當前表引擎:

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) 
+1

MySQL的版本?其中一些謊言關於這些東西... – Romain

回答

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) 
+1

你是對的,引擎類型被禁用。試圖找出現在最好的方式來啓用它。 –