第23章:INFORMATION_SCHEMA訊息資料庫

目錄

23.1. INFORMATION_SCHEMA資料表
23.1.1. INFORMATION_SCHEMA SCHEMATA資料表
23.1.2. INFORMATION_SCHEMA TABLES資料表
23.1.3. INFORMATION_SCHEMA COLUMNS資料表
23.1.4. INFORMATION_SCHEMA STATISTICS資料表
23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES資料表
23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES資料表
23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES資料表
23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES資料表
23.1.9. INFORMATION_SCHEMA CHARACTER_SETS資料表
23.1.10. INFORMATION_SCHEMA COLLATIONS資料表
23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY資料表
23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS資料表
23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE資料表
23.1.14. INFORMATION_SCHEMA ROUTINES資料表
23.1.15. INFORMATION_SCHEMA VIEWS資料表
23.1.16. INFORMATION_SCHEMA TRIGGERS資料表
23.1.17. 其他INFORMATION_SCHEMA資料表
23.2. SHOW語句的延伸

INFORMATION_SCHEMA提供了訪問資料庫元數據的方式。

元數據是關於數據的數據,如資料庫名或資料表名,列的數據類型,或訪問權限等。有些時候用於資料表述該訊息的其他術語包括「數據詞典」和「系統目錄」。

例如:

mysql> SELECT table_name, table_type, engine
-> FROM information_schema.tables
-> WHERE table_schema = 'db5'
-> ORDER BY table_name DESC;
 table_name(資料表名)
 table_type(資料表類型)
 引擎
 v56  
 VIEW(視圖)
 NULL
 v3

VIEW(視圖)

 NULL
 v2

VIEW(視圖)

 NULL
 v

VIEW(視圖)

 NULL
 tables 
 BASE TABLE(基本資料表)
 MyISAM 
 t7
 BASE TABLE(基本資料表)
 MyISAM 
 t3
 BASE TABLE(基本資料表)
 MyISAM 
 t2
 BASE TABLE(基本資料表)
 MyISAM 
 t
 BASE TABLE(基本資料表)
 MyISAM 
 pk
 BASE TABLE(基本資料表)
 InnoDB 
 loop 
 BASE TABLE(基本資料表)
 MyISAM 
 kurs 
 BASE TABLE(基本資料表)
 MyISAM 
 k
 BASE TABLE(基本資料表)
 MyISAM 
 into 
 BASE TABLE(基本資料表)
 MyISAM 
 goto 
 BASE TABLE(基本資料表)
 MyISAM 
 fk2  
 BASE TABLE(基本資料表)
 InnoDB 
 fk
 BASE TABLE(基本資料表)
 InnoDB 
集合中含17行(0.01秒)。

解釋:該語句請求按逆向字母順序列出資料庫db5中的所有資料表,但僅顯示三種訊息:資料表名,資料表類型,以及資料表引擎。

INFORMATION_SCHEMA是訊息資料庫,其中保存著關於MySQL伺服器所維護的所有其他資料庫的訊息。在INFORMATION_SCHEMA中,有數個只讀資料表。它們實際上是視圖,而不是基本資料表,因此,您將無法看到與之相關的任何檔案。

每位MySQL用戶均有權訪問這些資料表,但僅限於資料表中的特定行,在這類行中含有用戶具有恰當訪問權限的對象。

SELECT的優點

SELECT ... FROM INFORMATION_SCHEMA語句的目的在於提供一種更為一致的方式,以訪問MySQL所支援的各種SHOW語句(SHOW DATABASESSHOW TABLES等等)提供的訊息。與SHOW相比,使用SELECT有多項優點「

·         符合Codd規則。也就是說,所有訪問均是在資料表上進行的。

·         不需要瞭解新語句的語法。由於他們已知道SELECT的工作方式,僅需瞭解對像名即可。

·         實現人無需操心增加關鍵詞方面的事宜。

·         有數百萬種可能的輸出變化,而不是一種。這樣,就為對元數據有不同需求的應用程式提供了更高的靈活性。

·         由於其他DBMS也採用了這類方式,移植更為容易。

然而,由於SHOW在MySQL的僱員和用戶中十分流行,如果SHOW消失,可能會導致混亂,因此傳統的語法方式無法給出消除SHOW的足夠理由。事實上,在MySQL 5.1中,還對SHOW進行了多項增強。關於這方面的介紹,請參見23.2節,「SHOW語句的延伸

標準

在MySQL中,INFORMATION_SCHEMA資料表結構的實施遵從ANSI/ISO SQL:2003標準,第11部分綱要」。我們的目的在於,獲得與SQL:2003核心特性F021「基本訊息方案」的近似兼容。

SQL伺服器2000(也遵從該標準)的用戶可能已注意到它們高度的相似性。但是,MySQL略去了與我們的實施方式不相關的眾多列,並新增了一些MySQL特有的列。其中一種列就是INFORMATION_SCHEMA.TABLES資料表中的引擎列。

儘管其他DBMS使用了不同的名稱,如syscat或系統,但標準名稱是INFORMATION_SCHEMA

事實上,儘管不需要生成名為INFORMATION_SCHEMA的檔案,我們仍提供了名為INFORMATION_SCHEMA的新資料庫。可以使用USE語句將INFORMATION_SCHEMA選擇為預設資料庫,但訪問該資料庫中所含資料表的唯一方式是使用SELECT語句。不能在其中插入內容,不能更新它們,也不能刪除其中的內容。

權限

當前權限(SHOW)要求和SELCET權限要求不存在差別。在任何一種情況下,要想查看關於它的訊息,需要對某類對像擁有特定權限。

23.1. INFORMATION_SCHEMA資料表

下述章節說明

在下面的章節中,我們選擇了INFORMATION_SCHEMA中的資料表和列。對於每一列,有三類訊息:

·         「標準名稱」:指明了列的標準SQL名稱。

·         「SHOW名稱」:指明了最近SHOW語句中的等效字段名,如果有的話。

·         「註釋」給出了適用的附加訊息。

為了避免使用標準或DB2、SQL伺服器或Oracle中保留的名稱,我們更改了標注為「SQL延伸」的列名。(例如,在TABLES資料表中,我們將COLLATION改為TABLE_COLLATION)。請參見本文末尾處給出的保留字列資料表。http://www.dbazine.com/gulutzan5.shtml

字元列(例如TABLES.TABLE_NAME)定義通常是VARCHAR(N) CHARACTER SET utf8,其中,N至少為64。

在每一部分中,指明了等效於從INFORMATION_SCHEMA中檢索訊息的SELECT語句的SHOW語句,或者不存在這類語句。

註釋:目前,有一些丟失的列和一些混亂的列。我們正在著手解決該問題,並隨著變化情況更新文檔。

23.1.1. INFORMATION_SCHEMA SCHEMATA資料表

該方案是資料庫,因此SCHEMATA資料表提供了關於資料庫的訊息。

標準名稱

SHOW名稱

註釋

CATALOG_NAME

-

NULL

SCHEMA_NAME

 

Database

DEFAULT_CHARACTER_SET_NAME

 

 

DEFAULT_COLLATION_NAME

 

 

SQL_PATH

 

NULL

註釋:SQL_PATH列的之總為NULL

下述語句是等效的:

SELECT SCHEMA_NAME AS `Database
FROM INFORMATION_SCHEMA.SCHEMATA
[WHERE SCHEMA_NAME LIKE 'wild']
 
SHOW DATABASES
[LIKE 'wild']

23.1.2. INFORMATION_SCHEMA TABLES資料表

TABLES資料表給出了關於資料庫中的資料表的訊息。

標準名稱

SHOW名稱

註釋

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

Table_...

 

TABLE_NAME

Table_...

 

TABLE_TYPE

 

 

ENGINE

Engine

MySQL延伸

VERSION

Version

MySQL延伸

ROW_FORMAT

Row_format

MySQL延伸

TABLE_ROWS

Rows

MySQL延伸

AVG_ROW_LENGTH

Avg_row_length

MySQL延伸

DATA_LENGTH

Data_length

MySQL延伸

MAX_DATA_LENGTH

Max_data_length

MySQL延伸

INDEX_LENGTH

Index_length

MySQL延伸

DATA_FREE

Data_free

MySQL延伸

AUTO_INCREMENT

Auto_increment

MySQL延伸

CREATE_TIME

Create_time

MySQL延伸

UPDATE_TIME

Update_time

MySQL延伸

CHECK_TIME

Check_time

MySQL延伸

TABLE_COLLATION

Collation

MySQL延伸

CHECKSUM

Checksum

MySQL延伸

CREATE_OPTIONS

Create_options

MySQL延伸

TABLE_COMMENT

Comment

MySQL延伸

註釋:

·         TABLE_SCHEMATABLE_NAMESHOW顯示中的單個字段,例如Table_in_db1

·         TABLE_TYPE(資料表類型)應是BASE TABLE(基本資料表)VIEW(視圖)。如果資料表是臨時性的,TABLE_TYPE = TEMPORARY。(沒有臨時視圖,因此,因此不存在歧義)。

·         如果資料表位於INFORMATION_SCHEMA資料庫中,TABLE_ROWS列為NULL。對於InnoDB資料表,在SQL最佳化中,行計數僅是大概估計值。

·         沒有關於資料表預設字元編碼的任何訊息。TABLE_COLLATION處於關閉狀態,原因在於校對名稱以字元編碼名稱開頭。

下述語句是等效的:

SELECT table_name FROM INFORMATION_SCHEMA.TABLES
  [WHERE table_schema = 'db_name']
  [WHERE|AND table_name LIKE 'wild']
 
SHOW TABLES
  [FROM db_name]
  [LIKE 'wild']

23.1.3. INFORMATION_SCHEMA COLUMNS資料表

COLUMNS資料表給出了資料表中的列訊息。

標準名稱

SHOW名稱

註釋

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

COLUMN_NAME

Field

 

ORDINAL_POSITION

 

參見註釋

COLUMN_DEFAULT

Default

 

IS_NULLABLE

Null

 

DATA_TYPE

Type

 

CHARACTER_MAXIMUM_LENGTH

Type

 

CHARACTER_OCTET_LENGTH

 

 

NUMERIC_PRECISION

Type

 

NUMERIC_SCALE

Type

 

CHARACTER_SET_NAME

 

 

COLLATION_NAME

Collation

 

COLUMN_TYPE

Type

MySQL延伸

COLUMN_KEY

Key

MySQL延伸

EXTRA

Extra

MySQL延伸

COLUMN_COMMENT

Comment

MySQL延伸

註釋:

·         SHOW中,類型顯示包括來自數個不同COLUMNS列的值。

·         ORDINAL_POSITION有必要,這是因為,您可能會在某一天需要ORDER BY ORDINAL_POSITION(按ORDINAL_POSITION排序)。不同於SHOW,SELECT沒有自動排序功能。

·         CHARACTER_OCTET_LENGTH應與CHARACTER_MAXIMUM_LENGTH相同,但多字節字元編碼除外。

·         CHARACTER_SET_NAME可由Collation(校對)導出。例如,如果給出了「SHOW FULL COLUMNS FROM t」,在Collation(校對)列中將見到latin1_swedish_ci的值,字元編碼由第1個下劃線前的名稱指明。latin1.

下述語句是等效的:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']
 
SHOW COLUMNS
  FROM tbl_name
  [FROM db_name]
  [LIKE wild]

23.1.4. INFORMATION_SCHEMA STATISTICS資料表

STATISTICS資料表給出了關於資料表索引的訊息。

標準名稱

SHOW名稱

註釋

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

=資料庫

TABLE_NAME

Table

 

NON_UNIQUE

Non_unique

 

INDEX_SCHEMA

 

=資料庫

INDEX_NAME

Key_name

 

SEQ_IN_INDEX

Seq_in_index

 

COLUMN_NAME

Column_name

 

COLLATION

Collation

 

CARDINALITY

Cardinality

 

SUB_PART

Sub_part

MySQL延伸

PACKED

Packed

MySQL延伸

NULLABLE

Null

MySQL延伸

INDEX_TYPE

Index_type

MySQL延伸

COMMENT

Comment

MySQL延伸

註釋:

·         沒有關於這些索引的標準資料表。上面的列資料表與SQL伺服器2000中sp_statistics返回的值類似。不同之處在於用CATALOG替換了QUALIFIER,並用SCHEMA替換了OWNER。

顯而易見,前述資料表和SHOW INDEX的輸出均是由相同的父對像導出的。因此,相關性已關閉。

下述語句是等效的:

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
 
SHOW INDEX
  FROM tbl_name
  [FROM db_name]

23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES資料表

USER_PRIVILEGES(用戶權限)資料表給出了關於全程權限的訊息。該資訊來源自mysql.user授權資料表。

標準名稱

SHOW名稱

註釋

GRANTEE

 

例如「user'@'host」

TABLE_CATALOG

 

NULL

PRIVILEGE_TYPE

 

 

IS_GRANTABLE

 

 

註釋:

·         這是一個非標準資料表。其值來自mysql.user資料表。

23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES資料表

SCHEMA_PRIVILEGES(方案權限)資料表給出了關於方案(資料庫)權限的訊息。該訊息來自mysql.db授權資料表。

標準名稱

SHOW名稱

註釋

GRANTEE

 

例如「user'@'host」

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

PRIVILEGE_TYPE

 

 

IS_GRANTABLE

 

 

註釋:

·         這是一個非標準資料表。其值來自mysql.db資料表。

23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES資料表

TABLE_PRIVILEGES(資料表權限)資料表給出了關於資料表權限的訊息。該資訊來源自mysql.tables_priv授權資料表。

標準名稱

SHOW名稱

註釋

GRANTEE

 

例如「user'@'host」

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

PRIVILEGE_TYPE

 

 

IS_GRANTABLE

 

 

下述語句不等效:

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
 
SHOW GRANTS ...

PRIVILEGE_TYPE可以包含這些值之一(僅能一個):SELECTINSERTUPDATEREFERENCESALTERINDEXDROP、CREATE VIEW

23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES資料表

COLUMN_PRIVILEGES(列權限)資料表給出了關於列權限的訊息。該資訊來源自mysql.columns_priv授權資料表。

標準名稱

SHOW名稱

註釋

GRANTEE

 

例如「user'@'host」

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

COLUMN_NAME

 

 

PRIVILEGE_TYPE

 

 

IS_GRANTABLE

 

 

註釋:

·         SHOW FULL COLUMNS(顯示完整列)的輸出中,權限值位於一個字段並採用小寫形式,例如select、insert、update、references。COLUMN_PRIVILEGES中,每種權限占一行,並為大寫形式。

·         PRIVILEGE_TYPE可以包含這些值之一(僅能一個):SELECT, INSERT, UPDATE, REFERENCES.

·         如果用戶有GRANT OPTION權限,那麼IS_GRANTABLE應為YES。否則,IS_GRANTABLE應為NO。在輸出中,不會將GRANT OPTION作為單獨權限列出。

下述語句不等效:

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
 
SHOW GRANTS ...

23.1.9. INFORMATION_SCHEMA CHARACTER_SETS資料表

CHARACTER_SETS(字元編碼)資料表提供了關於可用字元編碼的訊息。

標準名稱

SHOW名稱

註釋

CHARACTER_SET_NAME

Charset

 

DEFAULT_COLLATE_NAME

Default collation

 

DESCRIPION

Description

MySQL延伸

MAXLEN

Maxlen

MySQL延伸

註釋:

·         我們增加了兩個非標準列,分別對應於SHOW CHARACTER SET輸出的Description(描述)和Maxlen(最大長度)列

下述語句是等效的:

SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
  [WHERE name LIKE 'wild']
 
SHOW CHARACTER SET
  [LIKE 'wild']

23.1.10. INFORMATION_SCHEMA COLLATIONS資料表

COLLATIONS資料表提供了關於各字元編碼的對照訊息。

標準名稱

SHOW名稱

註釋

COLLATION_NAME

Collation

 

註釋:

·         我們增加了5個非標準列,分別對應於SHOW COLLATION輸出的CharsetIdDefaultCompiledSortlen列

下述語句是等效的:

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
  [WHERE collation_name LIKE 'wild']
 
SHOW COLLATION
  [LIKE 'wild']

23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY資料表

COLLATION_CHARACTER_SET_APPLICABILITY資料表指明了可用於校對的字元編碼。這些列等效於SHOW COLLATION的前兩個顯示字段。

標準名稱

SHOW名稱

註釋

COLLATION_NAME

Collation

 

CHARACTER_SET_NAME

Charset

 

23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS資料表

TABLE_CONSTRAINTS資料表描述了存在約束的資料表。

標準名稱

SHOW名稱

註釋

CONSTRAINT_CATALOG

 

NULL

CONSTRAINT_SCHEMA

 

 

CONSTRAINT_NAME

 

 

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

CONSTRAINT_TYPE

 

 

註釋:

·         CONSTRAINT_TYPE的值可以是UNIQUE(唯一)PRIMARY KEY(主鍵)FOREIGN KEY(外部鍵)。

·         Non_unique字段為0時,UNIQUEPRIMARY KEY訊息與SHOW INDEX輸出的Key_name字段中給出的訊息基本相同。

·         CONSTRAINT_TYPE列可包含下述值之一:UNIQUEPRIMARY KEYFOREIGN KEYCHECK。這是一個CHAR(非ENUM)列。在我們支援CHECK前,CHECK值不可用。

23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE資料表

KEY_COLUMN_USAGE資料表描述了具有約束的鍵列。

標準名稱

SHOW名稱

註釋

CONSTRAINT_CATALOG

 

NULL

CONSTRAINT_SCHEMA

 

 

CONSTRAINT_NAME

 

 

TABLE_CATALOG

 

 

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

COLUMN_NAME

 

 

ORDINAL_POSITION

 

 

POSITION_IN_UNIQUE_CONSTRAINT

 

 

REFERENCED_TABLE_SCHEMA

 

 

REFERENCED_TABLE_NAME

 

 

REFERENCED_COLUMN_NAME

 

 

註釋:

·         如果約束為外部鍵,這就是外部鍵列,而不是外部鍵引用的列。

·         ORDINAL_POSITION的值是列在約束中的位置,而不是列在資料表中的位置。列位置採用從1開始的數值編號。

·         對於「唯一」和「主鍵」約束,POSITION_IN_UNIQUE_CONSTRAINT的值為NULL。對於「外部鍵」約束,它是所引用資料表內鍵中的順序位置。

例如,假定有兩個具有下述定義的資料表t1和t3:

CREATE TABLE t1
(
s1 INT,
s2 INT,
s3 INT,
PRIMARY KEY(s3)
) ENGINE=InnoDB;
 
CREATE TABLE t3
(
s1 INT,
s2 INT,
s3 INT,
KEY(s1),
CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)
) ENGINE=InnoDB;

對於這兩個資料表,KEY_COLUMN_USAGE資料表有兩行:

o        一行含有CONSTRAINT_NAME='PRIMARY', TABLE_NAME='t1', COLUMN_NAME='s3', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=NULL。

o        另一行含有CONSTRAINT_NAME='CO', TABLE_NAME='t3', COLUMN_NAME='s2', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=1。

23.1.14. INFORMATION_SCHEMA ROUTINES資料表

ROUTINES資料表提供了關於儲存子程式(儲存程式和函數)的訊息。此時,ROUTINES資料表不包含自行定義函數(UDF)。

名為「mysql.proc name」的列指明了對應於INFORMATION_SCHEMA.ROUTINES資料表的mysql.proc資料表列,如果有的話。

標準名稱

mysql.proc

註釋

SPECIFIC_NAME

specific_name

 

ROUTINE_CATALOG

 

NULL

ROUTINE_SCHEMA

db

 

ROUTINE_NAME

name

 

ROUTINE_TYPE

type

{PROCEDURE|FUNCTION}

DTD_IDENTIFIER

 

(數據類型描述符)

ROUTINE_BODY

 

SQL

ROUTINE_DEFINITION

body

 

EXTERNAL_NAME

 

NULL

EXTERNAL_LANGUAGE

language

NULL

PARAMETER_STYLE

 

SQL

IS_DETERMINISTIC

is_deterministic

 

SQL_DATA_ACCESS

sql_data_access

 

SQL_PATH

 

NULL

SECURITY_TYPE

security_type

 

CREATED

created

 

LAST_ALTERED

modified

 

SQL_MODE

sql_mode

MySQL延伸

ROUTINE_COMMENT

comment

MySQL延伸

DEFINER

definer

MySQL延伸

註釋:

·         MySQL計算EXTERNAL_LANGUAGE,因此:

o        如果mysql.proc.language='SQL',那麼EXTERNAL_LANGUAGENULL

o        否則,EXTERNAL_LANGUAGEmysql.proc.language中的值。然而,由於尚沒有外部語言,因此該值總為NULL

23.1.15. INFORMATION_SCHEMA VIEWS資料表

VIEWS資料表給出了關於資料庫中的視圖的訊息。

標準名稱

SHOW名稱

註釋

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

VIEW_DEFINITION

 

 

CHECK_OPTION

 

 

IS_UPDATABLE

 

 

DEFINER

 

 

SECURITY_TYPE

 

 

註釋:

·         有一種新的權限SHOW VIEW,如果沒有它,將無法看到VIEWS資料表。

·         VIEW_DEFINITION列含有您在SHOW CREATE VIEW所生成的Create Table字段中見到的大多數訊息。跳過SELECT前的單詞,並跳過具有CHECK OPTION(檢查選項)的單詞。例如,如果初始語句是:

·                CREATE VIEW v AS
·                  SELECT s2,s1 FROM t
·                  WHERE s1 > 5
·                  ORDER BY s1
·                  WITH CHECK OPTION;

那麼視圖定義為:

SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1

·         CHECK_OPTION列的值總為NONE

·         如果視圖是可更新的,IS_UPDATABLE列的值為YES,如果視圖是不可更新的,IS_UPDATABLE列的值為NO。

·         DEFINER列指明了定義視圖的人SECURITY_TYPE的值為DEFINERINVOKER

23.1.16. INFORMATION_SCHEMA TRIGGERS資料表

TRIGGERS資料表提供了關於觸發程式的訊息。

必須有SUPER權限才能查看該資料表。

標準名稱

SHOW名稱

註釋

TRIGGER_CATALOG

 

NULL

TRIGGER_SCHEMA

 

 

TRIGGER_NAME

Trigger

 

EVENT_MANIPULATION

Event

 

EVENT_OBJECT_CATALOG

 

NULL

EVENT_OBJECT_SCHEMA

 

 

EVENT_OBJECT_TABLE

Table

 

ACTION_ORDER

 

0

ACTION_CONDITION

 

NULL

ACTION_STATEMENT

Statement

 

ACTION_ORIENTATION

 

ROW

ACTION_TIMING

Timing

 

ACTION_REFERENCE_OLD_TABLE

 

NULL

ACTION_REFERENCE_NEW_TABLE

 

NULL

ACTION_REFERENCE_OLD_ROW

 

OLD

ACTION_REFERENCE_NEW_ROW

 

NEW

CREATED

 

NULL (0)

SQL_MODE

 

 

註釋:

·         TRIGGER_SCHEMATRIGGER_NAME列中分別含有相應資料庫的名稱以及觸發程式的名稱,在該資料庫中,含有該觸發程式。

·         EVENT_MANIPULATION列含有下述值之一:INSERT、DELETE、或UPDATE。

·         正如第21章:觸發程式中指出的那樣,每個觸發程式均與一個資料表準確相關。EVENT_OBJECT_SCHEMAEVENT_OBJECT_TABLE列包含相應的資料庫和資料表名,在該資料庫中,含有該資料表。

·         ACTION_ORDER語句含有觸發程式動作(在相同資料表上所有類似觸發程式列資料表中)的順序位置。目前該值總為0,這是因為在相同資料表上具有相同EVENT_MANIPULATIONACTION_TIMING的觸發程式不能超過1個。

·         ACTION_STATEMENT列含有激活了觸發程式時將要執行的語句。這與SHOW TRIGGERS輸出的Statement(語句)列中顯示的文本相同。注意,該文本採用了UTF-8編碼方式。

·         ACTION_ORIENTATION列總含有值「ROW

·         ACTION_TIMING列含有下述兩種值之一:BEFOREAFTER

·         ACTION_REFERENCE_OLD_ROWACTION_REFERENCE_NEW_ROW分別含有舊的和新的列標識符。這意味著ACTION_REFERENCE_OLD_ROW總含有值「OLD,ACTION_REFERENCE_NEW_ROW總含有值「NEW

·         SQL_MODE列顯示了建立觸發程式時有效的伺服器SQL模式(無論當前的伺服器SQL模式為何,只要激活了觸發程式,它將保持有效)。該列的可能取值範圍與sql_mode系統變數的取值範圍相同。請參見5.3.2節,「SQL伺服器模式」

·         在下述列中,目前總含有NULL:TRIGGER_CATALOGEVENT_OBJECT_CATALOGACTION_CONDITIONACTION_REFERENCE_OLD_TABLEACTION_REFERENCE_NEW_TABLECREATED

例如,使用21.3節,「使用觸發程式」中定義的觸發程式ins_sum。

mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G
*************************** 1. row ***************************
 TRIGGER_CATALOG: NULL
TRIGGER_SCHEMA: test
 TRIGGER_NAME: ins_sum
  EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: NULL
 EVENT_OBJECT_SCHEMA: test
  EVENT_OBJECT_TABLE: account
 ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT:  SET @sum = @sum + NEW.amount
  ACTION_ORIENTATION: ROW
 ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
CREATED: NULL
1 row in set (1.54 sec)

另請參見13.5.4.20節,「SHOW TRIGGERS語法」

23.1.17. 其他INFORMATION_SCHEMA資料表

我們打算實施附加的INFORMATION_SCHEMA資料表。尤其是,我們確認了對INFORMATION_SCHEMA.PARAMETERSINFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS的需求。

23.2. SHOW語句的延伸

某些SHOW語句的延伸伴隨著INFORMATION_SCHEMA的實施:

·         SHOW可用於獲取關於INFORMATION_SCHEMA本身結構的訊息。

·         一些SHOW語句允許使用WHERE子句,這樣,在指定需要顯示的行時,可更為靈活。

INFORMATION_SCHEMA是一種訊息資料庫,因此,在SHOW DATABASES的輸出中,包含其名稱。與此類似,SHOW TABLES可與INFORMATION_SCHEMA一起使用,以獲取資料表清單。

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema|
+---------------------------------------+
| SCHEMATA|
| TABLES|
| COLUMNS |
| CHARACTER_SETS |
| COLLATIONS  |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| ROUTINES|
| STATISTICS  |
| VIEWS |
| TRIGGERS|
| USER_PRIVILEGES|
| SCHEMA_PRIVILEGES  |
| TABLE_PRIVILEGES|
| COLUMN_PRIVILEGES  |
| TABLE_CONSTRAINTS  |
| KEY_COLUMN_USAGE|
+---------------------------------------+

SHOW COLUMNSDESCRIBE能夠顯示單獨INFORMATION_SCHEMA資料表中的列訊息。

延伸了一些SHOW語句,允許使用WHERE子句:

SHOW CHARACTER SET
SHOW COLLATION
SHOW COLUMNS
SHOW DATABASES
SHOW FUNCTION STATUS
SHOW KEYS
SHOW OPEN TABLES
SHOW PROCEDURE STATUS
SHOW STATUS
SHOW TABLE STATUS
SHOW TABLES
SHOW VARIABLES

如果有WHERE子句的話,將根據SHOW語句顯示的列名進行計算。例如,SHOW COLLATION語句可產生這些輸出列

例如,SHOW CHARACTER SET語句可產生這些輸出列

mysql> SHOW CHARACTER SET;
Charset
描述
預設校對
最大長度
 big5 
 Big5 Traditional Chinese
 big5_chinese_ci 
2 
 dec8 
 DEC West European 
 dec8_swedish_ci 
1 
 cp850
 DOS West European 
 cp850_general_ci
1 
 hp8
 HP West European
 hp8_english_ci
1 
 koi8r
 KOI8-R Relcom Russian 
 koi8r_general_ci
1 
 latin1
 cp1252 West European  
 latin1_swedish_ci
1 
 latin2
 ISO 8859-2 Central European 
 latin2_general_ci
1 
 

要想與SHOW CHARACTER SET一起使用WHERE子句,應引用這些列名稱。例如,在下面的語句中,給出了用於預設校對且含有字串「japanese」的字元編碼的訊息:

mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';
 Charset 
 描述 
預設校對
最大長度
 ujis
 EUC-JP Japanese 
 ujis_japanese_ci
3 
 sjis
 Shift-JIS Japanese  
 sjis_japanese_ci
2 
 cp932
 SJIS for Windows Japanese 
 cp932_japanese_ci
2 
 eucjpms 
 UJIS for Windows Japanese 
 eucjpms_japanese_ci 
3 

該語句顯示了多字節字元編碼。

mysql> SHOW CHARACTER SET WHERE Maxlen > 1;
 Charset 
 描述  
預設校對
最大長度
 big5
 Big5 Traditional Chinese  
 big5_chinese_ci 
2 
 ujis
 EUC-JP Japanese
 ujis_japanese_ci
3 
 sjis
 Shift-JIS Japanese  
 sjis_japanese_ci
2 
 euckr
 EUC-KR Korean 
 euckr_korean_ci 
2 
 gb2312  
 GB2312 Simplified Chinese 
 gb2312_chinese_ci
2 
 gbk 
 GBK Simplified Chinese
 gbk_chinese_ci
2 
 utf8
 UTF-8 Unicode 
 utf8_general_ci 
3 
 ucs2
 UCS-2 Unicode 
 ucs2_general_ci 
2 
 cp932
 SJIS for Windows Japanese 
 cp932_japanese_ci
2 
 eucjpms 
 UJIS for Windows Japanese 
 eucjpms_japanese_ci 
3 
 

這是MySQL參考手冊的翻譯版本,關於MySQL參考手冊,請訪問dev.mysql.com。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。