2010-12-23 155 views
66

在MySQL中,沒有辦法爲特定數據庫指定存儲引擎,只能爲單個表指定存儲引擎。但是,您可以指定要在一個會話期間使用的存儲引擎:如何知道mysql表是否使用myISAM或InnoDB引擎?

SET storage_engine=InnoDB; 

因此,您不必爲每個表指定它。

如何確認,如果確實所有表都使用InnoDB?

+0

可能重複[如何檢查特定表的MySQL引擎類型?](http://stackoverflow.com/questions/213543/how-can-i-check-mysql-engine-type-for-a -specific-table) – 2015-03-12 04:38:42

回答

107

如果使用SHOW CREATE TABLE,則必須將引擎解析出查詢。

從INFORMATION_SCHEMA數據庫中進行選擇是不好的做法,因爲開發人員隨時保留更改模式的權利(儘管不太可能)。

正確的查詢使用的是SHOW TABLE STATUS - 你可以在數據庫中獲取的所有表的信息:

SHOW TABLE STATUS FROM `database`; 

或特定表:

SHOW TABLE STATUS FROM `database` LIKE 'tablename'; 

其中一列你會回來的是引擎。

11
SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB' 
+0

只需要注意INFORMATION_SCHEMA中的數據被緩存,因此最好在聲明前使用[FLUSH TABLES](http://dev.mysql.com/doc/refman/5.0/en/flush.html)你提供了 – 2010-12-23 04:15:28

+0

@omg`ALTER TABLE SET ENIGINE =`不會清除/重置緩存? – 2010-12-23 04:36:21

2

show create table <table>應該這樣做。

相關問題