檢視mysql當前表使用的儲存引擎
阿新 • • 發佈:2019-01-29
說明:
當我們建立表 “test”表時
1.CREATETABLEtest(2. id INT(11) defaultNULLauto_increment,3. s char(60) defaultNULL,4. PRIMARYKEY(id)5.) ENGINE=InnoDB;
一般情況這樣沒任何問題。但是,如果MySQL伺服器配置中未啟用InnoDB儲存引擎。則在建立表 test 時,MySQL還是會自動選擇預設的儲存引擎MyISAM來建立test表。因為通過SHOW CREATE TABLE 表名 來查看錶使用的mysql儲存引擎是不準確的。
例項:
mysql伺服器未啟用InnoDB儲存引擎;
庫名:mytest;
表名:test(mytest.test);
帳號:root;
密碼:mypassword;
列 “Engine” 下顯示的值表示表正在使用的 MySQL 儲存引擎。
1.確認 MySQL 伺服器 是否啟用InnoDB儲存引擎
mysql> SHOW ENGINES;+------------+---------+----------------------------------------------------------+|Engine|Support|Comment|+------------+---------+----------------------------------------------------------+|InnoDB| NO |Supports transactions, row-level locking,and foreign keys|| MRG_MYISAM| YES |Collection of identical MyISAM tables || BLACKHOLE | YES |/dev/null storage engine (anything you write to it disa | CSV | YES | CSV storage engine || MEMORY | YES |Hash based, stored in memory, useful for temporary tables|| FEDERATED | NO |FederatedMySQL storage engine || ARCHIVE | YES |Archive storage engine ||MyISAM| DEFAULT |Default engine as of MySQL3.23with great performance|+------------+---------+----------------------------------------------------------+8 rows inset(0.00 sec)
返回結果是:InnoDB對應的Support為NO,表示未啟用InnoDB儲存引擎。
2.建立表 “test”
mysql> create database mytest;Query OK,1 row affected (0.02 sec) mysql>use mytest;Database changed mysql> CREATE TABLE test (-> id INT(11)default NULL auto_increment,-> s char(60)default NULL,-> PRIMARY KEY (id)->) ENGINE=InnoDB;Query OK,0 rows affected,2 warnings (0.06 sec) mysql>
3.使用“SHOW CREATE TABLE 表名” 來檢視,這種方式是不準確的
mysql> SHOW CREATE TABLE test;+-------+----------------------------------------------------------------------------+|Table|CreateTable|+-------+----------------------------------------------------------------------------+| test | CREATE TABLE `test`(`id`int(11) NOT NULL AUTO_INCREMENT,`s`char(60) DEFAULT NULL, PRIMARY KEY (`id`) ENGINE=InnoDB DEFAULT CHARSET=latin1 |+-------+----------------------------------------------------------------------------+1 row inset(0.00 sec)
可以看到test表還是InnoDB引擎!!
4.使用SHOW TABLE STATUS from 資料庫庫名 where Name=’表名’;這是正確的方式
# mysql -uroot -p'mypassword'Welcome to the MySQL monitor.Commandsendwith;or \g.YourMySQL connection id is221Server version:5.1.41-3ubuntu12.7(Ubuntu)Type'help;'or'\h'for help.Type'\c' to clear the current input statement. mysql> SHOW TABLE STATUS from mytest whereName='test';+------------+--------+---------+------------+------+----------------+-------------+|Name|Engine|Version|Row_format|Rows|Avg_row_length|Data_length|+------------+--------+---------+------------+------+----------------+-------------+| test |MyISAM|10|Fixed|0|0|0|+------------+--------+---------+------------+------+----------------+-------------+1 row inset(0.02 sec) mysql>
5.mysqlshow -u 資料庫登入帳號 -p ‘資料庫登入帳號密碼’ –status 資料庫庫名 表名,這也是正確的方式
# mysqlshow -uroot -p'mypassword' --status mytest testDatabase:mytest Wildcard: test +------------+--------+---------+------------+------+----------------+-------------+|Name|Engine|Version|Row_format|Rows|Avg_row_length|Data_length|+------------+--------+---------+------------+------+----------------+-------------+| test |MyISAM|10|Fixed|0|0|0|+------------+--------+---------+------------+------+----------------+-------------+
最後:
可以看出,在未啟用InnoDB儲存引擎的情況下,我們發現4,5步返回的結果是正確的,列Engine為MyISAM而不是InnoDB儲存引擎。而第3步使用 “SHOW CREATE TABLE 表名” 來查看錶使用的mysql儲存引擎是不準確的。