13.5.4. SHOW语法

SHOW有多种形式,可以提供有关数据库、表、列或服务器状态的信息。本节叙述以下内容:

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern']
SHOW CREATE DATABASE db_name
SHOW CREATE TABLE tbl_name
SHOW DATABASES [LIKE 'pattern']
SHOW ENGINE engine_name {LOGS | STATUS }
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW INNODB STATUS
SHOW [BDB] LOGS
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern']
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
SHOW [OPEN] TABLES [FROM db_name] [LIKE 'pattern']
SHOW TRIGGERS
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern']
SHOW WARNINGS [LIMIT [offset,] row_count]

SHOW语句还有一些形式,可以提供有关复制型主服务器和从属服务器的信息。这些形式在13.6节,“复制语句”中进行了叙述。

SHOW BINLOG EVENTS
SHOW MASTER LOGS
SHOW MASTER STATUS
SHOW SLAVE HOSTS
SHOW SLAVE STATUS

如果一个给定的SHOW语句的语法包括一个LIKE 'pattern'部分,则'pattern'是一个可以包含SQL %’和‘_’通配符的字符串。对于把语句输出值限定为匹配值,本样式是有用的。

13.5.4.1. SHOW CHARACTER SET语法

SHOW CHARACTER SET [LIKE 'pattern']

SHOW CHARACTER SET语句用于显示所有可用的字符集。该语句取一个自选的LIKE子句。该子句指示哪些字符集名称可以匹配。举例说明:

mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description                 | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |
| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
+---------+-----------------------------+-------------------+--------+

Maxlen列显示用于存储一个字符的最大的字节数目。

13.5.4.2. SHOW COLLATION语法

SHOW COLLATION [LIKE 'pattern']

来自SHOW COLLATION的输出包括所有可用的字符集。该语句取一个自选的LIKE子句。该子句的pattern指示哪些整序名称可以匹配。举例说明:

mysql> SHOW COLLATION LIKE 'latin1%';
+-------------------+---------+----+---------+----------+---------+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1  |  5 |         |          |       0 |
| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       0 |
| latin1_danish_ci  | latin1  | 15 |         |          |       0 |
| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
| latin1_bin        | latin1  | 47 |         | Yes      |       0 |
| latin1_general_ci | latin1  | 48 |         |          |       0 |
| latin1_general_cs | latin1  | 49 |         |          |       0 |
| latin1_spanish_ci | latin1  | 94 |         |          |       0 |
+-------------------+---------+----+---------+----------+---------+

Default列指示对于其字符集,整序值是否是默认值。Compiled指示字符集是否被编辑到服务器中。Sortlen与对字符串(在字符集中表达)分类所需的存储器的数量有关。

13.5.4.3. SHOW COLUMNS语法

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE 'pattern']

SHOW COLUMNS显示在一个给定表中的各列的信息。对于试图,本语句也起作用。

如果列类型与根据您的CREATE TABLE语句所预期的列类型不同,则需注意,当您创建或更改表时,MySQL有时会更改列类型。出现这种情况的条件在13.1.5.1节,“沉寂的列规格变更”中进行了描述。

FULL关键词会使得输出中包含您拥有的权限,并包含对每一列各自的评注。

您可以使用db_name.tbl_name作为tbl_name FROM db_name语法的另一种形式。换句话说,这两个语句是等价的:

mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;

SHOW FIELDSSHOW COLUMNS的同义词。您也可以使用mysqlshow db_name tbl_name命令列举表的各列。

DESCRIBE语句提供与SHOW COLUMNS相近的信息。请参见13.3.1节,“DESCRIBE语法(获取关于列的信息)”

13.5.4.4. SHOW CREATE DATABASE语法

SHOW CREATE {DATABASE | SCHEMA} db_name

显示用于创建给定数据库CREATE DATABASE语句。也可以使用SHOW CREATE SCHEMA

mysql> SHOW CREATE DATABASE test\G
*************************** 1. row ***************************
       Database: test
Create Database: CREATE DATABASE `test`
                 /*!40100 DEFAULT CHARACTER SET latin1 */
 
mysql> SHOW CREATE SCHEMA test\G
*************************** 1. row ***************************
       Database: test
Create Database: CREATE DATABASE `test` 
                 /*!40100 DEFAULT CHARACTER SET latin1 */

13.5.4.5. SHOW CREATE TABLE语法

SHOW CREATE TABLE tbl_name

显示用于创建给定表的CREATE TABLE语句。本语句对视图也起作用。

mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE t (
  id INT(11) default NULL auto_increment,
  s char(60) default NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM
 

根据SQL_QUOTE_SHOW_CREATE选项,SHOW CREATE TABLE会对表名称和列名称加引号。请参见13.5.3节,“SET语法”

13.5.4.6. SHOW DATABASES语法

SHOW {DATABASES | SCHEMAS} [LIKE 'pattern']

SHOW DATABASES可以在MySQL服务器主机上列举数据库。您也可以使用mysqlshow命令得到此清单。您只能看到您拥有某些权限的数据库,除非您拥有全局SHOW DATABASES权限。

如果服务器以--skip-show-database选项为起始,则您根本不能使用本语句,除非您拥有SHOW DATABASES权限。

也可以使用SHOW SCHEMAS

13.5.4.7. SHOW ENGINE语法

SHOW ENGINE engine_name {LOGS | STATUS }

SHOW ENGINE显示存储引擎的日志或状态信息。目前支持以下语句:

SHOW ENGINE BDB LOGS
SHOW ENGINE INNODB STATUS

SHOW ENGINE BDB LOGS显示原有BDB日志文件的状态信息。它会返回以下字段:

·         File

通向日志文件的完整路径。

·         Type

日志文件类型(用于Berkeley DB日志文件的BDB)。

·         Status

日志文件的状态(如果文件可以被取消,则为FREE。如果文件被事务子系统需要,则为IN USE

SHOW ENGINE INNODB STATUS显示InnoDB存储引擎状态的全面信息。

这些语句的旧的同义词(现在不赞成使用)是SHOW [BDB] LOGSSHOW INNODB STATUS

SHOW ENGINE可以从MySQL 4.1.2起使用。

13.5.4.8. SHOW ENGINES语法

SHOW [STORAGE] ENGINES

SHOW ENGINES显示存储引擎的状态信息。对于检查一个存储引擎是否被支持,或者对于查看默认引擎是什么,本语句十分有用。SHOW TABLE TYPES是同义词,但不赞成使用。

mysql> SHOW ENGINES\G
*************************** 1. row ***************************
 Engine: MyISAM
Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with great performance
*************************** 2. row ***************************
 Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** 3. row ***************************
 Engine: HEAP
Support: YES
Comment: Alias for MEMORY
*************************** 4. row ***************************
 Engine: MERGE
Support: YES
Comment: Collection of identical MyISAM tables
*************************** 5. row ***************************
 Engine: MRG_MYISAM
Support: YES
Comment: Alias for MERGE
*************************** 6. row ***************************
 Engine: ISAM
Support: NO
Comment: Obsolete storage engine, now replaced by MyISAM
*************************** 7. row ***************************
 Engine: MRG_ISAM
Support: NO
Comment: Obsolete storage engine, now replaced by MERGE
*************************** 8. row ***************************
 Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level locking, and foreign keys
*************************** 9. row ***************************
 Engine: INNOBASE
Support: YES
Comment: Alias for INNODB
*************************** 10. row ***************************
 Engine: BDB
Support: NO
Comment: Supports transactions and page-level locking
*************************** 11. row ***************************
 Engine: BERKELEYDB
Support: NO
Comment: Alias for BDB
*************************** 12. row ***************************
 Engine: NDBCLUSTER
Support: DISABLED
Comment: Clustered, fault-tolerant, memory-based tables
*************************** 13. row ***************************
 Engine: NDB
Support: DISABLED
Comment: Alias for NDBCLUSTER
*************************** 14. row ***************************
 Engine: EXAMPLE
Support: NO
Comment: Example storage engine
*************************** 15. row ***************************
 Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
*************************** 16. row ***************************
 Engine: CSV
Support: YES
Comment: CSV storage engine
*************************** 17. row ***************************
 Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
*************************** 18. row ***************************
 Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)

Support值指示某个存储引擎是否被支持,并指示哪个是默认引擎。例如,如果服务器以--default-table-type=InnoDB选项为起始,则InnoDB行的Support值为DEFAULT值。请参见第15章:存储引擎和表类型

13.5.4.9. SHOW ERRORS语法

SHOW ERRORS [LIMIT [offset,] row_count]
SHOW COUNT(*) ERRORS

本语句与SHOW WARNINGS接近,不过该语句只显示错误,不同时显示错误、警告和注意。

LIMIT子句与SELECT语句具有相同的语法,请参见13.2.7节,“SELECT语法”

SHOW COUNT(*) ERRORS语句显示错误的数目。您也可以从error_count变量中找回此数目:

SHOW COUNT(*) ERRORS;
SELECT @@error_count;

要了解更多信息,请参见13.5.4.22节,“SHOW WARNINGS语法”

13.5.4.10. SHOW GRANTS语法

SHOW GRANTS FOR user

本语句列出了在为MySQL用户账户复制权限时必须发布的GRANT语句。

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

要对当前的会话列出权限,您可以使用以下语句之一:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();

13.5.4.11. SHOW INDEX语法

SHOW INDEX FROM tbl_name [FROM db_name]

SHOW INDEX会返回表索引信息。其格式与ODBC中的SQLStatistics调用相似。

SHOW INDEX会返回以下字段:

·         Table

表的名称。

·         Non_unique

如果索引不能包括重复词,则为0。如果可以,则为1

·         Key_name

索引的名称。

·         Seq_in_index

索引中的列序列号,从1开始。

·         Column_name

列名称。

·         Collation

列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。

·         Cardinality

索引中唯一值的数目的估计值。通过运行ANALYZE TABLEmyisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。

·         Sub_part

如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL

·         Packed

指示关键字如何被压缩。如果没有被压缩,则为NULL

·         Null

如果列含有NULL,则含有YES。如果没有,则该列含有NO

·         Index_type

用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

·         Comment

多种评注。

您可以使用db_name.tbl_name作为tbl_name FROM db_name语法的另一种形式。这两个语句是等价的:

mysql> SHOW INDEX FROM mytable FROM mydb;
mysql> SHOW INDEX FROM mydb.mytable;

SHOW KEYSSHOW INDEX的同义词。您也可以使用mysqlshow -k db_name tbl_name命令列举一个表的索引。

13.5.4.12. SHOW INNODB STATUS语法

SHOW INNODB STATUS

MySQL 5.1中,这是SHOW ENGINE INNODB STATUS的同义词,但不赞成使用。请参见13.5.4.7节,“SHOW ENGINE语法”

13.5.4.13. SHOW LOGS语法

SHOW [BDB] LOGS

MySQL 5.1中,这是SHOW ENGINE BDB LOGS的同义词,但是不赞成使用。请参见13.5.4.7节,“SHOW ENGINE语法”

13.5.4.14. SHOW OPEN TABLES语法

SHOW OPEN TABLES [FROM db_name] [LIKE 'pattern']

SHOW OPEN TABLES列举在表缓存中当前被打开的非TEMPORARY表。请参见7.4.9节,“MySQL如何打开和关闭表”

SHOW OPEN TABLES会返回以下字段:

·         Database

含有该表的数据库。

·         Table

表名称。

·         In_use

表当前被查询使用的次数。如果该数为零,则表是打开的,但是当前没有被使用。

·         Name_locked

表名称是否被锁定。名称锁定用于取消表或对表进行重命名等操作。

13.5.4.15. SHOW PRIVILEGES语法

SHOW PRIVILEGES

SHOW PRIVILEGES显示MySQL服务器支持的系统权限清单。确切的输出根据您的服务器的版本而定。

mysql> SHOW PRIVILEGES\G
*************************** 1. row ***************************
Privilege: Alter
Context: Tables
Comment: To alter the table
*************************** 2. row ***************************
Privilege: Alter routine
Context: Functions,Procedures
Comment: To alter or drop stored functions/procedures
*************************** 3. row ***************************
Privilege: Create
Context: Databases,Tables,Indexes
Comment: To create new databases and tables
*************************** 4. row ***************************
Privilege: Create routine
Context: Functions,Procedures
Comment: To use CREATE FUNCTION/PROCEDURE
*************************** 5. row ***************************
Privilege: Create temporary tables
Context: Databases
Comment: To use CREATE TEMPORARY TABLE
*************************** 6. row ***************************
Privilege: Create view
Context: Tables
Comment: To create new views
*************************** 7. row ***************************
Privilege: Create user
Context: Server Admin
Comment: To create new users
*************************** 8. row ***************************
Privilege: Delete
Context: Tables
Comment: To delete existing rows
*************************** 9. row ***************************
Privilege: Drop
Context: Databases,Tables
Comment: To drop databases, tables, and views
*************************** 10. row ***************************
Privilege: Execute
Context: Functions,Procedures
Comment: To execute stored routines
*************************** 11. row ***************************
Privilege: File
Context: File access on server
Comment: To read and write files on the server
*************************** 12. row ***************************
Privilege: Grant option
Context: Databases,Tables,Functions,Procedures
Comment: To give to other users those privileges you possess
*************************** 13. row ***************************
Privilege: Index
Context: Tables
Comment: To create or drop indexes
*************************** 14. row ***************************
Privilege: Insert
Context: Tables
Comment: To insert data into tables
*************************** 15. row ***************************
Privilege: Lock tables
Context: Databases
Comment: To use LOCK TABLES (together with SELECT privilege)
*************************** 16. row ***************************
Privilege: Process
Context: Server Admin
Comment: To view the plain text of currently executing queries
*************************** 17. row ***************************
Privilege: References
Context: Databases,Tables
Comment: To have references on tables
*************************** 18. row ***************************
Privilege: Reload
Context: Server Admin
Comment: To reload or refresh tables, logs and privileges
*************************** 19. row ***************************
Privilege: Replication client
Context: Server Admin
Comment: To ask where the slave or master servers are
*************************** 20. row ***************************
Privilege: Replication slave
Context: Server Admin
Comment: To read binary log events from the master
*************************** 21. row ***************************
Privilege: Select
Context: Tables
Comment: To retrieve rows from table
*************************** 22. row ***************************
Privilege: Show databases
Context: Server Admin
Comment: To see all databases with SHOW DATABASES
*************************** 23. row ***************************
Privilege: Show view
Context: Tables
Comment: To see views with SHOW CREATE VIEW
*************************** 24. row ***************************
Privilege: Shutdown
Context: Server Admin
Comment: To shut down the server
*************************** 25. row ***************************
Privilege: Super
Context: Server Admin
Comment: To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
*************************** 26. row ***************************
Privilege: Update
Context: Tables
Comment: To update existing rows
*************************** 27. row ***************************
Privilege: Usage
Context: Server Admin
Comment: No privileges - allow connect only

13.5.4.16. SHOW PROCESSLIST语法

SHOW [FULL] PROCESSLIST

SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。请参见13.5.5.3节,“KILL语法”。如果您不使用FULL关键词,则只显示每个查询的前100个字符。

本语句报告TCP/IP连接的主机名称(采用host_name:client_port格式),以方便地判定哪个客户端正在做什么。

如果您得到“too many connections”错误信息,并且想要了解正在发生的情况,本语句是非常有用的。MySQL保留一个额外的连接,让拥有SUPER权限的 账户使用,以确保管理员能够随时连接和检查系统(假设您没有把此权限给予所有的用户)。

在来自SHOW PROCESSLIST的输出中常见的一些状态:

·         Checking table

线程正在执行(自动)表格检查。

·         Closing tables

意味着线程正在刷新更改后的表数据,并正在关闭使用过的表。这应该是一个快速的操作。如果不快,则您应该验证您的磁盘没有充满,并且磁盘没有被超负荷使用。

·         Connect Out

连接到主服务器上的从属服务器。

·         Copying to tmp table on disk

临时结果集合大于tmp_table_size。线程把临时表从存储器内部格式改变为磁盘模式,以节约存储器。

·         Creating tmp table

线程正在创建一个临时表,以保持部分结果。

·         deleting from main table

服务器正在执行多表删除的第一部分,只从第一个表中删除。

·         deleting from reference tables

服务器正在执行多表删除的第二部分,从其它表中删除匹配的行。

·         Flushing tables

线程正在执行FLUSH TABLES,并正在等待所有线程,以关闭表。

·         FULLTEXT initialization

服务器正在准备执行一个自然语言全文本搜索。

·         Killed

有人已经向线程发送了一个KILL命令。在下一次检查终止标记时,应放弃。该标记在MySQL的每个大循环中都检查,但是在有些情况下,线程终止只需要较短的时间。如果该线程被其它线程锁定,则只要其它线程接触锁定,终止操作就会生效。

·         Locked

该查询被其它查询锁定。

·         Sending data

线程正在为SELECT语句处理行,同时正在向客户端发送数据。

·         Sorting for group

线程正在进行分类,以满足GROUP BY要求。

·         Sorting for order

线程正在进行分类,以满足ORDER BY要求。

·         Opening tables

线程正在试图打开一个表。这应该是非常快的过程,除非打开操作受到阻止。例如,一个ALTER TABLE或一个LOCK TABLE语句可以阻止打开一个表,直到语句完成为止。

·         Removing duplicates

查询正在使用SELECT DISTINCT。使用时,在早期阶段,MySQL不能优化不同的操作。因此,MySQL要求一个额外的阶段,以便在把结果发送给客户端之前取消所有的复制行。

·         Reopen table

线程得到一个表锁定,但是在得到锁定后被通知带下方的表结构已更改了。它已经释放了锁定,关闭了表,并试图重新打开它。

·         Repair by sorting

修复代码正在使用一个分类来创建索引。

·         Repair with keycache

修复代码正在通过关键缓存一个接一个地使用创建关键字。这比通过分类修复要慢很多。

·         Searching rows for update

线程正在进行第一阶段,以在更新之前,查找所有匹配的行。如果UPDATE正在更改用于查找相关行的索引,则必须这么做。

·         Sleeping

线程正在等待客户端,以向它发送一个新语句。

·         System lock

线程正在等待得到一个用于表的外部系统锁定。如果您没有正在使用多个正在访问同一个表的mysqld服务器,则您可以使用--skip-external-locking选项禁用系统锁定。

·         Upgrading lock

INSERT DELAYED管理程序正在试图得到一个表锁定,以插入行。

·         Updating

线程正在搜索行,并正在更新这些行。

·         User Lock

线程正在等待GET_LOCK()

·         Waiting for tables

线程得到一个通知,表的底层结构已经改变,需要重新打开表以得到新的结构。但是,为了能重新打开表,必须等待,直到所有其它的线程已经关闭了正在被质询的表。

如果其它线程已经对正在被质询的表使用了FLUSH TABLES或以下语句之一:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLEOPTIMIZE TABLE;则会出现通知。

·         waiting for handler insert

INSERT DELAYED管理程序已经处理了所有处于等待状态的插入,并正在等待新插入。

多数状态对应于非常快的操作。如果一个线程在这些状态下停留了数秒,则可能是有问题,需要进行调查。

有一些其它的状态,在前面的清单中没有提及,但是其中有很多状态对于查找服务器中的程序错误是有用的。

13.5.4.17. SHOW STATUS语法

SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern']

SHOW STATUS提供服务器状态信息。此信息也可以使用mysqladmin extended-status命令获得。

此处显示了局部的输出。对于您的服务器,变量和值的清单可以是不同的。在5.3.4节,“服务器状态变量”中给出了每个变量的意义。

mysql> SHOW STATUS;
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| Aborted_clients          | 0          |
| Aborted_connects         | 0          |
| Bytes_received           | 155372598  |
| Bytes_sent               | 1176560426 |
| Connections              | 30023      |
| Created_tmp_disk_tables  | 0          |
| Created_tmp_tables       | 8340       |
| Created_tmp_files        | 60         |
...                       ...          ...
| Open_tables              | 1          |
| Open_files               | 2          |
| Open_streams             | 0          |
| Opened_tables            | 44600      |
| Questions                | 2026873    |
...                       ...          ...
| Table_locks_immediate    | 1920382    |
| Table_locks_waited       | 0          |
| Threads_cached           | 0          |
| Threads_created          | 30022      |
| Threads_connected        | 1          |
| Threads_running          | 1          |
| Uptime                   | 80380      |
+--------------------------+------------+

使用LIKE子句,该语句只显示匹配该样式的那些变量:

mysql> SHOW STATUS LIKE 'Key%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| Key_blocks_used    | 14955    |
| Key_read_requests  | 96854827 |
| Key_reads          | 162040   |
| Key_write_requests | 7589728  |
| Key_writes         | 3813196  |
+--------------------+----------+

使用GLOBAL选项,您可以得到所有MySQL连接的状态值。使用SESSION,您可以得到所有当前连接的状态值。如果您两个选项都不使用,则默认值为SESSIONLOCALSESSION的同义词。

注意,有些状态变量只有一个全局值。对于这些变量,使用GLOBALSESSION会得到同样的值。

13.5.4.18. SHOW TABLE STATUS语法

SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

SHOW TABLE STATUS的性质与SHOW TABLE类似,不过,可以提供每个表的大量信息。您也可以使用mysqlshow --status db_name命令得到此清单。

本语句也显示视图信息。

对于NDB Cluster表,本语句的输出显示Avg_row_lengthData_length列的适当值,不过BLOB列没有被考虑进来。另外,复制数量在Comment列中显示(作为number_of_replicas)。

SHOW TABLE STATUS会返回以下字段:

·         Name

表的名称。

·         Engine

表的存储引擎。在MySQL 4.1.2之前,本值被标记为Type。请参见第15章:存储引擎和表类型

·         Version

表的.frm文件的版本号。

·         Row_format

行存储格式(Fixed, Dynamic, Compressed, Redundant, Compact)。InnoDB表的格式被报告为RedundantCompact

·         Rows

行的数目。部分存储引擎,如MyISAM,存储精确的数目。

对于其它存储引擎,比如InnoDB,本值是一个大约的数,与实际值相差可达4050%。在这些情况下,使用SELECT COUNT(*)来获得准确的数目。

对于在INFORMATION_SCHEMA数据库中的表,Rows值为NULL

·         Avg_row_length

平均的行长度。

·         Data_length

数据文件的长度。

·         Max_data_length

数据文件的最大长度。如果给定了数据指针的大小,这是可以被存储在表中的数据的字节总数。

·         Index_length

索引文件的长度。

·         Data_free

被整序,但是未使用的字节的数目。

·         Auto_increment

下一个AUTO_INCREMENT值。

·         Create_time

什么时候表被创建。

·         Update_time

什么时候数据文件被最后一次更新。

·         Check_time

什么时候表被最后一次检查。不是所有的存储引擎此时都更新,在此情况下,值为NULL

·         Collation

表的字符集和整序。

·         Checksum

活性校验和值。

·         Create_options

CREATE TABLE同时使用的额外选项。

·         Comment

创建表时使用的评注(或者有关为什么MySQL可以访问表信息的说明)。

在表评注中,InnoDB表报告表所属的表空间的空闲空间。对于一个位于共享表空间中的表,这是共享表空间中的空闲空间。如果您正在使用多个表空间,并且该表有自己的表空间,则空闲空间只用于此表。

对于MEMORY (HEAP)表,Data_length, Max_data_lengthIndex_length值近似于被整序的存储器的实际值。整序算法预留了大量的存储器,以减少整序操作的数量。

对于视图,由SHOW TABLE STATUS显示的所有字段均为NULL。例外情况是Name指示为视图名称同时Comment称为视图。

13.5.4.19. SHOW TABLES语法

SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern']

SHOW TABLES列举了给定数据库中的非TEMPORARY表。您也可以使用mysqlshow db_name命令得到此清单。

本命令也列举数据库中的其它视图。支持FULL修改符,这样SHOW FULL TABLES就可以显示第二个输出列。对于一个表,第二列的值为BASE TABLE;对于一个视图,第二列的值为VIEW

注释:如果您对于一个表没有权限,则该表不会在来自SHOW TABLES或的mysqlshow db_name输出中显示。

13.5.4.20. SHOW TRIGGERS语法

SHOW TRIGGERS [FROM db_name] [LIKE expr]

SHOW TRIGGERS列出了目前被MySQL服务器定义的触发程序。

对于在21.3节,“使用触发程序”中定义的触发程序ins_sum,本语句的输出显示如下:

mysql> SHOW TRIGGERS LIKE 'acc%';
+---------+--------+---------+-------------------------------+--------+---------+
| Trigger | Event  | Table   | Statement                     | Timing | Created |
+---------+--------+---------+-------------------------------+--------+---------+
| ins_sum | INSERT | account |  SET @sum = @sum + NEW.amount | BEFORE | NULL    |
+---------+--------+---------+-------------------------------+--------+---------+

注释:当使用一个含有SHOW TRIGGERSLIKE子句时,待匹配的表达式(expr)会与触发程序定义时所在的表的名称相比较,而不与触发程序的名称相比较:

mysql> SHOW TRIGGERS LIKE 'ins%';
Empty set (0.01 sec)

对本语句输出中的各列的简要解释如下:

·         Trigger: 触发程序的名称。

·         Event: 调用触发程序的时间。必须为'INSERT', 'UPDATE''DELETE'.之一。

·         Table: 触发程序定义时对应的表。

·         Statement: 当触发程序被调用时执行的语句。这与在INFORMATION_SCHEMA.TRIGGERSACTION_STATEMENT列中显示的文本一样。

·         Timing: 'BEFORE''AFTER'两个值之一。

·         Created: 目前,本列的值为NULL

为了执行SHOW TRIGGERS,您必须拥有SUPER权限。

同时也见23.1.16节,“INFORMATION_SCHEMA TRIGGERS表”

13.5.4.21. SHOW VARIABLES语法

SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern']

SHOW VARIABLES显示了部门MySQL系统变量的值。本信息也可以使用mysqladmin variables命令获得。

使用GLOBAL选项,您可以获得被用于MySQL新连接的值。使用SESSION,您可以得到对于当前连接起效的值。如果您两个选项都不使用,默认值为SESSION

LOCALSESSION的同义词。

如果默认值不合适,当mysqld启动时或在SET语句运行过程中,您可以使用命令行选项设置多数的这类变量。请参见5.3.1节,“mysqld命令行选项”13.5.3节,“SET语法

此处显示了部分的输出。对于您的服务器,变量和值的清单会有所不同。在5.3.3节,“服务器系统变量”中给出了每个变量的意义。在7.5.2节,“调节服务器参数”中提供了有关调整变量的信息。

mysql> SHOW VARIABLES;
+---------------------------------+-----------------------------------------------+
| Variable_name                   | Value                                         |
+---------------------------------+-----------------------------------------------+
| auto_increment_increment        | 1                                             |
| auto_increment_offset           | 1                                             |
| automatic_sp_privileges         | ON                                            |
| back_log                        | 50                                            |
| basedir                         | /home/jon/bin/mysql-5.1/                      |
| binlog_cache_size               | 32768                                         |
| bulk_insert_buffer_size         | 8388608                                       |
| character_set_client            | latin1                                        |
| character_set_connection        | latin1                                        |
...                               ...                                              
| max_user_connections            | 0                                             |
| max_write_lock_count            | 4294967295                                    |
| multi_range_count               | 256                                           |
| myisam_data_pointer_size        | 6                                             |
| myisam_max_sort_file_size       | 2147483647                                    |
| myisam_recover_options          | OFF                                           |
| myisam_repair_threads           | 1                                             |
| myisam_sort_buffer_size         | 8388608                                       |
| ndb_autoincrement_prefetch_sz   | 32                                            |
| ndb_cache_check_time            | 0                                             |
| ndb_force_send                  | ON                                            |
...                               ...                                                       ...    
| time_zone                       | SYSTEM                                        |
| timed_mutexes                   | OFF                                           |
| tmp_table_size                  | 33554432                                      |
| tmpdir                          |                                               |
| transaction_alloc_block_size    | 8192                                          |
| transaction_prealloc_size       | 4096                                          |
| tx_isolation                    | REPEATABLE-READ                               |
| updatable_views_with_limit      | YES                                           |
| version                         | 5.1.2-alpha-log                               |
| version_comment                 | Source distribution                           |
| version_compile_machine         | i686                                          |
| version_compile_os              | suse-linux                                    |
| wait_timeout                    | 28800                                         |
+---------------------------------+-----------------------------------------------+

使用LIKE子句,本语句只显示与样式相匹配的变量:

mysql> SHOW VARIABLES LIKE 'have%';
+-----------------------+----------+
| Variable_name         | Value    |
+-----------------------+----------+
| have_archive          | YES      |
| have_bdb              | NO       |
| have_blackhole_engine | YES      |
| have_compress         | YES      |
| have_crypt            | YES      |
| have_csv              | YES      |
| have_example_engine   | NO       |
| have_federated_engine | NO       |
| have_geometry         | YES      |
| have_innodb           | YES      |
| have_isam             | NO       |
| have_ndbcluster       | DISABLED |
| have_openssl          | NO       |
| have_partition_engine | YES      |
| have_query_cache      | YES      |
| have_raid             | NO       |
| have_rtree_keys       | YES      |
| have_symlink          | YES      |
+-----------------------+----------+

13.5.4.22. SHOW WARNINGS语法

SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS

SHOW WARNINGS显示由上一个生成消息的语句导致的错误、警告和注意消息。如果上一个使用表的语句未生成消息,则什么也不显示。SHOW ERRORS是其相关语句,只显示错误。请参见13.5.4.9节,“SHOW ERRORS语法”

对于使用一个表的每个新语句,消息清单均重新设置。

SHOW COUNT(*) WARNINGS语句显示错误、警告和注意的总数。您也可以从warning_count变量中找回此数目。

SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;

如果max_error_count系统变量设置得过低,以致于有的消息没有被存储,则warning_count值可能比由SHOW WARNINGS显示的消息数目要大。本节后部显示的例子展示了这类情况是如何发生的。

LIMIT子句具有与SELECT语句相同的语法。请参见13.2.7节,“SELECT语法”

MySQL服务器会发回由上一个语句引起的错误、警告和注意的总数。如果您正在使用C API,则此值可以通过调用mysql_warning_count()来获得。请参见25.2.3.69节,“mysql_warning_count()”

对于如LOAD DATA INFILE等语句和如INSERT, UPDATE, CREATE TABLEALTER TABLEDML语句,会生成警告。

以下DROP TABLE语句会导致一个注意:

mysql> DROP TABLE IF EXISTS no_such_table;
mysql> SHOW WARNINGS;
+-------+------+-------------------------------+
| Level | Code | Message                       |
+-------+------+-------------------------------+
| Note  | 1051 | Unknown table 'no_such_table' |
+-------+------+-------------------------------+

以下是一个简单的例子,显示了对于CREATE TABLE的一个语法警告,和对于INSERT的转换警告:

mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1287
Message: 'TYPE=storage_engine' is deprecated, use
         'ENGINE=storage_engine' instead
1 row in set (0.00 sec)
 
mysql> INSERT INTO t1 VALUES(10,'mysql'),(NULL,'test'),
    -> (300,'Open Source');
Query OK, 3 rows affected, 4 warnings (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 4
 
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1263
Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2
*************************** 3. row ***************************
  Level: Warning
   Code: 1264
Message: Data truncated, out of range for column 'a' at row 3
*************************** 4. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 3
4 rows in set (0.00 sec)

要存储的错误、警告和注意消息的最大数目由max_error_count系统变量控制。默认情况下,该值为64。要更改您想要存储的信息的数目,需更改max_error_count值。在下面的例子中,ALTER TABLE语句会产生三个警告消息,但是只有一个被存储,因为max_error_count被设置为1

mysql> SHOW VARIABLES LIKE 'max_error_count';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_error_count | 64    |
+-----------------+-------+
1 row in set (0.00 sec)
 
mysql> SET max_error_count=1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> ALTER TABLE t1 MODIFY b CHAR;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3
 
mysql> SELECT @@warning_count;
+-----------------+
| @@warning_count |
+-----------------+
|               3 |
+-----------------+
1 row in set (0.01 sec)
 
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

要禁用警告,需把max_error_count设置为0。在此情况下,warning_count仍然指示有多少警告已经发生,但是这些消息不被存储。

您可以把SQL_NOTES会话变量设置为0,使“注意”级别的警告不被记录。

关注编程学问公众号