?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
目錄
INFORMATION_SCHEMA提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。
元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),如數(shù)據(jù)庫名或表名,列的數(shù)據(jù)類型,或訪問權(quán)限等。有些時(shí)候用于表述該信息的其他術(shù)語包括“數(shù)據(jù)詞典”和“系統(tǒng)目錄”。
例如:
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秒)。
解釋:該語句請(qǐng)求按逆向字母順序列出數(shù)據(jù)庫db5中的所有表,但僅顯示三種信息:表名,表類型,以及表引擎。
INFORMATION_SCHEMA是信息數(shù)據(jù)庫,其中保存著關(guān)于MySQL服務(wù)器所維護(hù)的所有其他數(shù)據(jù)庫的信息。在INFORMATION_SCHEMA中,有數(shù)個(gè)只讀表。它們實(shí)際上是視圖,而不是基本表,因此,你將無法看到與之相關(guān)的任何文件。
每位MySQL用戶均有權(quán)訪問這些表,但僅限于表中的特定行,在這類行中含有用戶具有恰當(dāng)訪問權(quán)限的對(duì)象。
SELECT的優(yōu)點(diǎn)
SELECT ... FROM INFORMATION_SCHEMA語句的目的在于提供一種更為一致的方式,以訪問MySQL所支持的各種SHOW語句(SHOW DATABASES、SHOW TABLES等等)提供的信息。與SHOW相比,使用SELECT有多項(xiàng)優(yōu)點(diǎn)“
·???????? 符合Codd規(guī)則。也就是說,所有訪問均是在表上進(jìn)行的。
·???????? 不需要了解新語句的語法。由于他們已知道SELECT的工作方式,僅需了解對(duì)象名即可。
·???????? 實(shí)現(xiàn)人無需操心增加關(guān)鍵詞方面的事宜。
·???????? 有數(shù)百萬種可能的輸出變化,而不是一種。這樣,就為對(duì)元數(shù)據(jù)有不同需求的應(yīng)用程序提供了更高的靈活性。
·???????? 由于其他DBMS也采用了這類方式,移植更為容易。
然而,由于SHOW在MySQL的雇員和用戶中十分流行,如果SHOW消失,可能會(huì)導(dǎo)致混亂,因此傳統(tǒng)的語法方式無法給出消除SHOW的足夠理由。事實(shí)上,在MySQL
5.1中,還對(duì)SHOW進(jìn)行了多項(xiàng)增強(qiáng)。關(guān)于這方面的介紹,請(qǐng)參見23.2節(jié),“SHOW語句的擴(kuò)展”。
標(biāo)準(zhǔn)
在MySQL中,INFORMATION_SCHEMA表結(jié)構(gòu)的實(shí)施遵從“ANSI/ISO SQL:2003標(biāo)準(zhǔn),第11部分綱要”。我們的目的在于,獲得與SQL:2003核心特性F021“基本信息方案”的近似兼容。
SQL服務(wù)器2000(也遵從該標(biāo)準(zhǔn))的用戶可能已注意到它們高度的相似性。但是,MySQL略去了與我們的實(shí)施方式不相關(guān)的眾多列,并添加了一些MySQL特有的列。其中一種列就是INFORMATION_SCHEMA.TABLES表中的引擎列。
盡管其他DBMS使用了不同的名稱,如syscat或系統(tǒng),但標(biāo)準(zhǔn)名稱是INFORMATION_SCHEMA。
事實(shí)上,盡管不需要生成名為INFORMATION_SCHEMA的文件,我們?nèi)蕴峁┝嗣麨镮NFORMATION_SCHEMA的新數(shù)據(jù)庫。可以使用USE語句將INFORMATION_SCHEMA選擇為默認(rèn)數(shù)據(jù)庫,但訪問該數(shù)據(jù)庫中所含表的唯一方式是使用SELECT語句。不能在其中插入內(nèi)容,不能更新它們,也不能刪除其中的內(nèi)容。
權(quán)限
當(dāng)前權(quán)限(SHOW)要求和SELCET權(quán)限要求不存在差別。在任何一種情況下,要想查看關(guān)于它的信息,需要對(duì)某類對(duì)象擁有特定權(quán)限。
下述章節(jié)說明
在下面的章節(jié)中,我們選擇了INFORMATION_SCHEMA中的表和列。對(duì)于每一列,有三類信息:
·???????? “標(biāo)準(zhǔn)名稱”:指明了列的標(biāo)準(zhǔn)SQL名稱。
·???????? “SHOW名稱”:指明了最近SHOW語句中的等效字段名,如果有的話。
·???????? “注釋”給出了適用的附加信息。
為了避免使用標(biāo)準(zhǔn)或DB2、SQL服務(wù)器或Oracle中保留的名稱,我們更改了標(biāo)注為“SQL擴(kuò)展”的列名。(例如,在TABLES表中,我們將COLLATION改為TABLE_COLLATION)。請(qǐng)參見本文末尾處給出的保留字列表。http://www.dbazine.com/gulutzan5.shtml。
字符列(例如TABLES.TABLE_NAME)定義通常是VARCHAR(N) CHARACTER SET utf8,其中,N至少為64。
在每一部分中,指明了等效于從INFORMATION_SCHEMA中檢索信息的SELECT語句的SHOW語句,或者不存在這類語句。
注釋:目前,有一些丟失的列和一些混亂的列。我們正在著手解決該問題,并隨著變化情況更新文檔。
該方案是數(shù)據(jù)庫,因此SCHEMATA表提供了關(guān)于數(shù)據(jù)庫的信息。
標(biāo)準(zhǔn)名稱 |
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']
TABLES表給出了關(guān)于數(shù)據(jù)庫中的表的信息。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
TABLE_CATALOG |
? |
NULL |
TABLE_SCHEMA |
Table_... |
? |
TABLE_NAME |
Table_... |
? |
TABLE_TYPE |
? |
? |
ENGINE |
Engine |
MySQL擴(kuò)展 |
VERSION |
Version |
MySQL擴(kuò)展 |
ROW_FORMAT |
Row_format |
MySQL擴(kuò)展 |
TABLE_ROWS |
Rows |
MySQL擴(kuò)展 |
AVG_ROW_LENGTH |
Avg_row_length |
MySQL擴(kuò)展 |
DATA_LENGTH |
Data_length |
MySQL擴(kuò)展 |
MAX_DATA_LENGTH |
Max_data_length |
MySQL擴(kuò)展 |
INDEX_LENGTH |
Index_length |
MySQL擴(kuò)展 |
DATA_FREE |
Data_free |
MySQL擴(kuò)展 |
AUTO_INCREMENT |
Auto_increment |
MySQL擴(kuò)展 |
CREATE_TIME |
Create_time |
MySQL擴(kuò)展 |
UPDATE_TIME |
Update_time |
MySQL擴(kuò)展 |
CHECK_TIME |
Check_time |
MySQL擴(kuò)展 |
TABLE_COLLATION |
Collation |
MySQL擴(kuò)展 |
CHECKSUM |
Checksum |
MySQL擴(kuò)展 |
CREATE_OPTIONS |
Create_options |
MySQL擴(kuò)展 |
TABLE_COMMENT |
Comment |
MySQL擴(kuò)展 |
注釋:
·???????? TABLE_SCHEMA和TABLE_NAME是SHOW顯示中的單個(gè)字段,例如Table_in_db1。
·???????? TABLE_TYPE(表類型)應(yīng)是BASE TABLE(基本表)或VIEW(視圖)。如果表是臨時(shí)性的,TABLE_TYPE = TEMPORARY。(沒有臨時(shí)視圖,因此,因此不存在歧義)。
·???????? 如果表位于INFORMATION_SCHEMA數(shù)據(jù)庫中,TABLE_ROWS列為NULL。對(duì)于InnoDB表,在SQL優(yōu)化中,行計(jì)數(shù)僅是大概估計(jì)值。
·???????? 沒有關(guān)于表默認(rèn)字符集的任何信息。TABLE_COLLATION處于關(guān)閉狀態(tài),原因在于校對(duì)名稱以字符集名稱開頭。
下述語句是等效的:
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']
COLUMNS表給出了表中的列信息。
標(biāo)準(zhǔn)名稱 |
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擴(kuò)展 |
COLUMN_KEY |
Key |
MySQL擴(kuò)展 |
EXTRA |
Extra |
MySQL擴(kuò)展 |
COLUMN_COMMENT |
Comment |
MySQL擴(kuò)展 |
注釋:
·???????? 在SHOW中,類型顯示包括來自數(shù)個(gè)不同COLUMNS列的值。
·???????? ORDINAL_POSITION有必要,這是因?yàn)?,你可能?huì)在某一天需要ORDER BY ORDINAL_POSITION(按ORDINAL_POSITION排序)。不同于SHOW,SELECT沒有自動(dòng)排序功能。
·???????? CHARACTER_OCTET_LENGTH應(yīng)與CHARACTER_MAXIMUM_LENGTH相同,但多字節(jié)字符集除外。
·???????? CHARACTER_SET_NAME可由Collation(校對(duì))導(dǎo)出。例如,如果給出了“SHOW FULL COLUMNS FROM t”,在Collation(校對(duì))列中將見到latin1_swedish_ci的值,字符集由第1個(gè)下劃線前的名稱指明。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]
STATISTICS表給出了關(guān)于表索引的信息。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
TABLE_CATALOG |
? |
NULL |
TABLE_SCHEMA |
? |
=數(shù)據(jù)庫 |
TABLE_NAME |
Table |
? |
NON_UNIQUE |
Non_unique |
? |
INDEX_SCHEMA |
? |
=數(shù)據(jù)庫 |
INDEX_NAME |
Key_name |
? |
SEQ_IN_INDEX |
Seq_in_index |
? |
COLUMN_NAME |
Column_name |
? |
COLLATION |
Collation |
? |
CARDINALITY |
Cardinality |
? |
SUB_PART |
Sub_part |
MySQL擴(kuò)展 |
PACKED |
Packed |
MySQL擴(kuò)展 |
NULLABLE |
Null |
MySQL擴(kuò)展 |
INDEX_TYPE |
Index_type |
MySQL擴(kuò)展 |
COMMENT |
Comment |
MySQL擴(kuò)展 |
注釋:
·???????? 沒有關(guān)于這些索引的標(biāo)準(zhǔn)表。上面的列表與SQL服務(wù)器2000中sp_statistics返回的值類似。不同之處在于用CATALOG替換了QUALIFIER,并用SCHEMA替換了OWNER。
顯而易見,前述表和SHOW INDEX的輸出均是由相同的父對(duì)象導(dǎo)出的。因此,相關(guān)性已關(guān)閉。
下述語句是等效的:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS
? WHERE table_name = 'tbl_name'
?[AND table_schema = 'db_name']
?
SHOW INDEX
?FROM tbl_name
? [FROM db_name]
USER_PRIVILEGES(用戶權(quán)限)表給出了關(guān)于全程權(quán)限的信息。該信息源自mysql.user授權(quán)表。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
GRANTEE |
? |
例如“user'@'host” |
TABLE_CATALOG |
? |
NULL |
PRIVILEGE_TYPE |
? |
? |
IS_GRANTABLE |
? |
? |
注釋:
·???????? 這是一個(gè)非標(biāo)準(zhǔn)表。其值來自mysql.user表。
SCHEMA_PRIVILEGES(方案權(quán)限)表給出了關(guān)于方案(數(shù)據(jù)庫)權(quán)限的信息。該信息來自mysql.db授權(quán)表。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
GRANTEE |
? |
例如“user'@'host” |
TABLE_CATALOG |
? |
NULL |
TABLE_SCHEMA |
? |
? |
PRIVILEGE_TYPE |
? |
? |
IS_GRANTABLE |
? |
? |
注釋:
·???????? 這是一個(gè)非標(biāo)準(zhǔn)表。其值來自mysql.db表。
TABLE_PRIVILEGES(表權(quán)限)表給出了關(guān)于表權(quán)限的信息。該信息源自mysql.tables_priv授權(quán)表。
標(biāo)準(zhǔn)名稱 |
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可以包含這些值之一(僅能一個(gè)):SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE VIEW。
COLUMN_PRIVILEGES(列權(quán)限)表給出了關(guān)于列權(quán)限的信息。該信息源自mysql.columns_priv授權(quán)表。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
GRANTEE |
? |
例如“user'@'host” |
TABLE_CATALOG |
? |
NULL |
TABLE_SCHEMA |
? |
? |
TABLE_NAME |
? |
? |
COLUMN_NAME |
? |
? |
PRIVILEGE_TYPE |
? |
? |
IS_GRANTABLE |
? |
? |
注釋:
·???????? 在SHOW FULL COLUMNS(顯示完整列)的輸出中,權(quán)限值位于一個(gè)字段并采用小寫形式,例如select、insert、update、references。在COLUMN_PRIVILEGES中,每種權(quán)限占一行,并為大寫形式。
·???????? PRIVILEGE_TYPE可以包含這些值之一(僅能一個(gè)):SELECT, INSERT, UPDATE, REFERENCES.
·???????? 如果用戶有GRANT OPTION權(quán)限,那么IS_GRANTABLE應(yīng)為YES。否則,IS_GRANTABLE應(yīng)為NO。在輸出中,不會(huì)將GRANT OPTION作為單獨(dú)權(quán)限列出。
下述語句不等效:
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
?
SHOW GRANTS ...
CHARACTER_SETS(字符集)表提供了關(guān)于可用字符集的信息。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
CHARACTER_SET_NAME |
Charset |
? |
DEFAULT_COLLATE_NAME |
Default collation |
? |
DESCRIPION |
Description |
MySQL擴(kuò)展 |
MAXLEN |
Maxlen |
MySQL擴(kuò)展 |
注釋:
·???????? 我們?cè)黾恿藘蓚€(gè)非標(biāo)準(zhǔn)列,分別對(duì)應(yīng)于SHOW CHARACTER SET輸出的Description(描述)和Maxlen(最大長度)列。
下述語句是等效的:
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
? [WHERE name LIKE 'wild']
?
SHOW CHARACTER SET
? [LIKE 'wild']
COLLATIONS表提供了關(guān)于各字符集的對(duì)照信息。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
COLLATION_NAME |
Collation |
? |
注釋:
·???????? 我們?cè)黾恿?個(gè)非標(biāo)準(zhǔn)列,分別對(duì)應(yīng)于SHOW COLLATION輸出的Charset、Id、Default、Compiled和Sortlen列。
下述語句是等效的:
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
? [WHERE collation_name LIKE 'wild']
?
SHOW COLLATION
? [LIKE 'wild']
COLLATION_CHARACTER_SET_APPLICABILITY表指明了可用于校對(duì)的字符集。這些列等效于SHOW COLLATION的前兩個(gè)顯示字段。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
COLLATION_NAME |
Collation |
? |
CHARACTER_SET_NAME |
Charset |
? |
TABLE_CONSTRAINTS表描述了存在約束的表。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
CONSTRAINT_CATALOG |
? |
NULL |
CONSTRAINT_SCHEMA |
? |
? |
CONSTRAINT_NAME |
? |
? |
TABLE_SCHEMA |
? |
? |
TABLE_NAME |
? |
? |
CONSTRAINT_TYPE |
? |
? |
注釋:
·???????? CONSTRAINT_TYPE的值可以是UNIQUE(唯一)、PRIMARY KEY(主鍵)或FOREIGN KEY(外鍵)。
·???????? 當(dāng)Non_unique字段為0時(shí),UNIQUE和PRIMARY KEY信息與SHOW INDEX輸出的Key_name字段中給出的信息基本相同。
·???????? CONSTRAINT_TYPE列可包含下述值之一:UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK。這是一個(gè)CHAR(非ENUM)列。在我們支持CHECK前,CHECK值不可用。
KEY_COLUMN_USAGE表描述了具有約束的鍵列。
標(biāo)準(zhǔn)名稱 |
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開始的數(shù)值編號(hào)。
·???????? 對(duì)于“唯一”和“主鍵”約束,POSITION_IN_UNIQUE_CONSTRAINT的值為NULL。對(duì)于“外鍵”約束,它是所引用表內(nèi)鍵中的順序位置。
例如,假定有兩個(gè)具有下述定義的表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;
對(duì)于這兩個(gè)表,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。
ROUTINES表提供了關(guān)于存儲(chǔ)子程序(存儲(chǔ)程序和函數(shù))的信息。此時(shí),ROUTINES表不包含自定義函數(shù)(UDF)。
名為“mysql.proc name”的列指明了對(duì)應(yīng)于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列,如果有的話。
標(biāo)準(zhǔn)名稱 |
mysql.proc名 |
注釋 |
SPECIFIC_NAME |
specific_name |
? |
ROUTINE_CATALOG |
? |
NULL |
ROUTINE_SCHEMA |
db |
? |
ROUTINE_NAME |
name |
? |
ROUTINE_TYPE |
type |
{PROCEDURE|FUNCTION} |
DTD_IDENTIFIER |
? |
(數(shù)據(jù)類型描述符) |
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擴(kuò)展 |
ROUTINE_COMMENT |
comment |
MySQL擴(kuò)展 |
DEFINER |
definer |
MySQL擴(kuò)展 |
注釋:
·???????? MySQL計(jì)算EXTERNAL_LANGUAGE,因此:
o??????? 如果mysql.proc.language='SQL',那么EXTERNAL_LANGUAGE為NULL。
o??????? 否則,EXTERNAL_LANGUAGE為mysql.proc.language中的值。然而,由于尚沒有外部語言,因此該值總為NULL。
VIEWS表給出了關(guān)于數(shù)據(jù)庫中的視圖的信息。
標(biāo)準(zhǔn)名稱 |
SHOW名稱 |
注釋 |
TABLE_CATALOG |
? |
NULL |
TABLE_SCHEMA |
? |
? |
TABLE_NAME |
? |
? |
VIEW_DEFINITION |
? |
? |
CHECK_OPTION |
? |
? |
IS_UPDATABLE |
? |
? |
DEFINER |
? |
? |
SECURITY_TYPE |
? |
? |
注釋:
·???????? 有一種新的權(quán)限SHOW VIEW,如果沒有它,將無法看到VIEWS表。
·???????? VIEW_DEFINITION列含有你在SHOW CREATE VIEW所生成的Create Table字段中見到的大多數(shù)信息。跳過SELECT前的單詞,并跳過具有CHECK OPTION(檢查選項(xiàng))的單詞。例如,如果初始語句是:
·??????????????? 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的值為DEFINER或INVOKER。
TRIGGERS表提供了關(guān)于觸發(fā)程序的信息。
必須有SUPER權(quán)限才能查看該表。
標(biāo)準(zhǔn)名稱 |
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_SCHEMA和TRIGGER_NAME列中分別含有相應(yīng)數(shù)據(jù)庫的名稱以及觸發(fā)程序的名稱,在該數(shù)據(jù)庫中,含有該觸發(fā)程序。
·???????? EVENT_MANIPULATION列含有下述值之一:INSERT、DELETE、或UPDATE。
·???????? 正如第21章:觸發(fā)程序中指出的那樣,每個(gè)觸發(fā)程序均與一個(gè)表準(zhǔn)確相關(guān)。EVENT_OBJECT_SCHEMA和EVENT_OBJECT_TABLE列包含相應(yīng)的數(shù)據(jù)庫和表名,在該數(shù)據(jù)庫中,含有該表。
·???????? ACTION_ORDER語句含有觸發(fā)程序動(dòng)作(在相同表上所有類似觸發(fā)程序列表中)的順序位置。目前該值總為0,這是因?yàn)樵谙嗤砩暇哂邢嗤?span>EVENT_MANIPULATION和ACTION_TIMING的觸發(fā)程序不能超過1個(gè)。
·???????? ACTION_STATEMENT列含有激活了觸發(fā)程序時(shí)將要執(zhí)行的語句。這與SHOW TRIGGERS輸出的Statement(語句)列中顯示的文本相同。注意,該文本采用了UTF-8編碼方式。
·???????? ACTION_ORIENTATION列總含有值“ROW”。
·???????? ACTION_TIMING列含有下述兩種值之一:“BEFORE”或“AFTER”。
·???????? 列ACTION_REFERENCE_OLD_ROW和ACTION_REFERENCE_NEW_ROW分別含有舊的和新的列標(biāo)識(shí)符。這意味著ACTION_REFERENCE_OLD_ROW總含有值“OLD”,ACTION_REFERENCE_NEW_ROW總含有值“NEW”。
·???????? SQL_MODE列顯示了創(chuàng)建觸發(fā)程序時(shí)有效的服務(wù)器SQL模式(無論當(dāng)前的服務(wù)器SQL模式為何,只要激活了觸發(fā)程序,它將保持有效)。該列的可能取值范圍與sql_mode系統(tǒng)變量的取值范圍相同。請(qǐng)參見5.3.2節(jié),“SQL服務(wù)器模式”。
·???????? 在下述列中,目前總含有NULL:TRIGGER_CATALOG,EVENT_OBJECT_CATALOG,ACTION_CONDITION,ACTION_REFERENCE_OLD_TABLE,ACTION_REFERENCE_NEW_TABLE和CREATED。
例如,使用21.3節(jié),“使用觸發(fā)程序”中定義的觸發(fā)程序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)
另請(qǐng)參見13.5.4.20節(jié),“SHOW TRIGGERS語法”。
某些SHOW語句的擴(kuò)展伴隨著INFORMATION_SCHEMA的實(shí)施:
·???????? SHOW可用于獲取關(guān)于INFORMATION_SCHEMA本身結(jié)構(gòu)的信息。
·???????? 一些SHOW語句允許使用WHERE子句,這樣,在指定需要顯示的行時(shí),可更為靈活。
INFORMATION_SCHEMA是一種信息數(shù)據(jù)庫,因此,在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 COLUMNS和DESCRIBE能夠顯示單獨(dú)INFORMATION_SCHEMA表中的列信息。
擴(kuò)展了一些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子句的話,將根據(jù)SHOW語句顯示的列名進(jìn)行計(jì)算。例如,SHOW COLLATION語句可產(chǎn)生這些輸出列:
例如,SHOW CHARACTER SET語句可產(chǎn)生這些輸出列:
mysql> SHOW CHARACTER SET;
Charset
|
描述 |
默認(rèn)校對(duì) |
最大長度 |
?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子句,應(yīng)引用這些列名稱。例如,在下面的語句中,給出了用于默認(rèn)校對(duì)且含有字符串“japanese”的字符集的信息:
mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';
?Charset
|
?描述? |
默認(rèn)校對(duì) |
最大長度 |
?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
|
該語句顯示了多字節(jié)字符集。
mysql> SHOW CHARACTER SET WHERE Maxlen > 1;
?Charset
|
?描述? |
默認(rèn)校對(duì) |
最大長度 |
?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參考手冊(cè)的翻譯版本,關(guān)于MySQL參考手冊(cè),請(qǐng)?jiān)L問dev.mysql.com。原始參考手冊(cè)為英文版,與英文版參考手冊(cè)相比,本翻譯版可能不是最新的。