2010-12-23 143 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>应该这样做。

相关问题