1. 程式人生 > >檢視mysql當前表使用的儲存引擎

檢視mysql當前表使用的儲存引擎

說明:
當我們建立表 “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儲存引擎是不準確的。