MySQL8 中文参考(一百零三)
28.3.8 The INFORMATION_SCHEMA COLUMNS Table
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html
COLUMNS 表提供有关表中列的信息。相关的 ST_GEOMETRY_COLUMNS 表提供有关存储空间数据的表列的信息。请参阅 Section 28.3.35, “The INFORMATION_SCHEMA ST_GEOMETRY_COLUMNS Table”。
COLUMNS 表具有以下列:
-
TABLE_CATALOG包含列的表所属的目录名称。此值始终为
def。 -
TABLE_SCHEMA包含列的表所属的模式(数据库)的名称。
-
TABLE_NAME包含列的表的名称。
-
COLUMN_NAME列的名称。
-
ORDINAL_POSITION列在表中的位置。
ORDINAL_POSITION是必要的,因为您可能想说ORDER BY ORDINAL_POSITION。与SHOW COLUMNS不同,从COLUMNS表中的SELECT没有自动排序。 -
COLUMN_DEFAULT列的默认值。如果列具有显式默认值为
NULL,或者列定义不包含DEFAULT子句,则为NULL。 -
IS_NULLABLE列的可空性。如果可以在列中存储
NULL值,则值为YES,否则为NO。 -
DATA_TYPE列数据类型。
DATA_TYPE值仅为类型名称,没有其他信息。COLUMN_TYPE值包含类型名称,可能还包含其他信息,如精度或长度。 -
CHARACTER_MAXIMUM_LENGTH对于字符串列,以字符为单位的最大长度。
-
CHARACTER_OCTET_LENGTH对于字符串列,以字节为单位的最大长度。
-
NUMERIC_PRECISION对于数字列,数字精度。
-
NUMERIC_SCALE对于数字列,数字刻度。
-
DATETIME_PRECISION对于时间列,小数秒精度。
-
CHARACTER_SET_NAME对于字符串列,字符集名称。
-
COLLATION_NAME对于字符串列,排序规则名称。
-
COLUMN_TYPE列数据类型。
DATA_TYPE值仅为类型名称,没有其他信息。COLUMN_TYPE值包含类型名称,可能还包含其他信息,如精度或长度。 -
COLUMN_KEY列是否已索引:
-
如果
COLUMN_KEY为空,则该列未被索引或仅作为多列非唯一索引中的次要列被索引。 -
如果
COLUMN_KEY为PRI,则该列是PRIMARY KEY或是多列PRIMARY KEY中的一列。 -
如果
COLUMN_KEY为UNI,则该列是UNIQUE索引的第一列。(UNIQUE索引允许多个NULL值,但您可以通过检查Null列来确定列是否允许NULL。) -
如果
COLUMN_KEY为MUL,则该列是非唯一索引的第一列,在该索引中允许在列内出现给定值的多个实例。
如果表的给定列有多个
COLUMN_KEY值适用,则COLUMN_KEY显示具有最高优先级的值,按照PRI,UNI,MUL的顺序。如果
UNIQUE索引不能包含NULL值且表中没有PRIMARY KEY,则UNIQUE索引可能显示为PRI。如果几列形成复合UNIQUE索引,则UNIQUE索引可能显示为MUL;尽管列的组合是唯一的,但每列仍然可以包含给定值的多个实例。 -
-
EXTRA关于给定列的任何其他可用信息。在这些情况下,该值不为空:
-
对于具有
AUTO_INCREMENT属性的列,显示auto_increment。 -
对于具有
ON UPDATE CURRENT_TIMESTAMP属性的TIMESTAMP或DATETIME列,显示on update CURRENT_TIMESTAMP。 -
对于生成列,显示
STORED GENERATED或VIRTUAL GENERATED。 -
DEFAULT_GENERATED用于具有表达式默认值的列。
-
-
PRIVILEGES您对该列拥有的权限。
-
COLUMN_COMMENT包括在列定义中的任何注释。
-
GENERATION_EXPRESSION对于生成的列,显示用于计算列值的表达式。对于非生成列为空。有关生成列的信息,请参见第 15.1.20.8 节,“CREATE TABLE 和生成列”。
-
SRS_ID此值适用于空间列。它包含列
SRID值,指示存储在列中的值的空间参考系统。参见第 13.4.1 节,“空间数据类型”和第 13.4.5 节,“空间参考系统支持”。对于非空间列和没有SRID属性的空间列,该值为NULL。
注释
-
在
SHOW COLUMNS中,Type显示包括来自几个不同的COLUMNS列的值。 -
CHARACTER_OCTET_LENGTH应与CHARACTER_MAXIMUM_LENGTH相同,除了多字节字符集。 -
CHARACTER_SET_NAME可以从COLLATION_NAME派生。例如,如果你执行SHOW FULL COLUMNS FROM t,并且在COLLATION_NAME列中看到一个值为utf8mb4_swedish_ci,那么字符集就是出现在第一个下划线之前的内容:utf8mb4。
列信息也可以通过SHOW COLUMNS语句获取。参见 Section 15.7.7.5, “SHOW COLUMNS Statement”。以下语句几乎是等效的:
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*']
在 MySQL 8.0.30 及更高版本中,默认情况下,此表中可见生成的不可见主键列的信息。您可以通过设置show_gipk_in_create_table_and_information_schema = OFF来隐藏这些信息。更多信息,请参见 Section 15.1.20.11, “Generated Invisible Primary Keys”。
28.3.9 INFORMATION_SCHEMA COLUMNS_EXTENSIONS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-columns-extensions-table.html
COLUMNS_EXTENSIONS 表(自 MySQL 8.0.21 起可用)提供有关为主存储引擎和次要存储引擎定义的列属性的信息。
注意
COLUMNS_EXTENSIONS 表保留供将来使用。
COLUMNS_EXTENSIONS 表包含以下列:
-
TABLE_CATALOG表所属目录的名称。该值始终为
def。 -
TABLE_SCHEMA表所属模式(数据库)的名称。
-
TABLE_NAME表的名称。
-
COLUMN_NAME列的名称。
-
ENGINE_ATTRIBUTE为主存储引擎定义的列属性。保留供将来使用。
-
SECONDARY_ENGINE_ATTRIBUTE为次要存储引擎定义的列属性。保留供将来使用。
28.3.10 INFORMATION_SCHEMA COLUMN_PRIVILEGES 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-column-privileges-table.html
COLUMN_PRIVILEGES 表提供有关列权限的信息。它从 mysql.columns_priv 系统表中获取其值。
COLUMN_PRIVILEGES 表具有以下列:
-
GRANTEE授予权限的帐户的名称,格式为
'*user_name*'@'*host_name*'。 -
TABLE_CATALOG包含列的表所属的目录的名称。此值始终为
def。 -
TABLE_SCHEMA表中包含列的模式(数据库)的名称。
-
TABLE_NAME包含列的表的名称。
-
COLUMN_NAME列的名称。
-
PRIVILEGE_TYPE授予的权限。该值可以是可以在列级别授予的任何权限;请参见第 15.7.1.6 节,“GRANT Statement”。每行列出一个权限,因此每个受让人持有的列权限都有一行。
在
SHOW FULL COLUMNS的输出中,权限都在一个列中且为小写,例如,select,insert,update,references。在COLUMN_PRIVILEGES中,每行一个权限,且为大写。 -
IS_GRANTABLE如果用户具有
GRANT OPTION权限,则为YES,否则为NO。输出不会将GRANT OPTION列为具有PRIVILEGE_TYPE='GRANT OPTION'的单独行。
注意
COLUMN_PRIVILEGES是一个非标准的INFORMATION_SCHEMA表。
以下语句不等价:
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
SHOW GRANTS ...
28.3.11 INFORMATION_SCHEMA COLUMN_STATISTICS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-column-statistics-table.html
COLUMN_STATISTICS 表提供对列值直方图统计信息的访问。
有关直方图统计信息,请参阅 Section 10.9.6, “优化器统计信息”和 Section 15.7.3.1, “ANALYZE TABLE 语句”。
你只能查看你拥有某些权限的列的信息。
COLUMN_STATISTICS 表包含以下列:
-
SCHEMA_NAME统计信息适用的模式的名称。
-
TABLE_NAME统计信息适用的列的名称。
-
COLUMN_NAME统计信息适用的列的名称。
-
HISTOGRAM一个描述列统计信息的
JSON对象,存储为直方图。
28.3.12 The INFORMATION_SCHEMA ENABLED_ROLES Table
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-enabled-roles-table.html
ENABLED_ROLES 表(自 MySQL 8.0.19 起可用)提供了关于当前会话中启用的角色的信息。
ENABLED_ROLES 表包含以下列:
-
ROLE_NAME被授予角色的用户名称部分。
-
ROLE_HOST被授予角色的主机名部分。
-
IS_DEFAULTYES或NO,取决于角色是否是默认角色。 -
IS_MANDATORYYES或NO,取决于角色是否是强制性的。
28.3.13 INFORMATION_SCHEMA ENGINES 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-engines-table.html
ENGINES 表提供有关存储引擎的信息。这对于检查存储引擎是否受支持或查看默认引擎非常有用。
ENGINES 表具有以下列:
-
ENGINE存储引擎的名称。
-
SUPPORT服务器对存储引擎的支持级别,如下表所示。
值 含义 YES该引擎受支持且处于活动状态 DEFAULT类似于 YES,并且这是默认引擎NO该引擎不受支持 DISABLED该引擎受支持但已被禁用 一个值为
NO表示服务器在编译时没有对该引擎提供支持,因此无法在运行时启用。值为
DISABLED可能是因为服务器启动时使用了禁用引擎的选项,或者因为没有提供启用它所需的所有选项。在后一种情况下,错误日志应包含指示为什么选项被禁用的原因。请参阅 Section 7.4.2, “The Error Log”。如果服务器编译时支持某个存储引擎,但是启动时使用了
--skip-*engine_name*选项,则可能会看到存储引擎的DISABLED。对于NDB存储引擎,DISABLED表示服务器编译时支持 NDB Cluster,但未使用--ndbcluster选项启动。所有 MySQL 服务器都支持
MyISAM表。无法禁用MyISAM。 -
COMMENT存储引擎的简要描述。
-
TRANSACTIONS存储引擎是否支持事务。
-
XA存储引擎是否支持 XA 事务。
-
SAVEPOINTS存储引擎是否支持保存点。
注意
ENGINES是一个非标准的INFORMATION_SCHEMA表。
存储引擎信息也可以通过 SHOW ENGINES 语句获取。请参阅 Section 15.7.7.16, “SHOW ENGINES Statement”。以下语句是等效的:
SELECT * FROM INFORMATION_SCHEMA.ENGINES
SHOW ENGINES
28.3.14 INFORMATION_SCHEMA EVENTS Table
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-events-table.html
EVENTS表提供有关事件管理器事件的信息,这些事件在第 27.4 节“使用事件调度程序”中讨论。
EVENTS表具有以下列:
-
EVENT_CATALOG事件所属的目录的名称。此值始终为
def。 -
EVENT_SCHEMA事件所属的模式(数据库)的名称。
-
EVENT_NAME事件的名称。
-
DEFINERDEFINER子句中指定的帐户(通常是创建事件的用户),格式为'*user_name*'@'*host_name*'。 -
TIME_ZONE事件时区,用于调度事件并在事件执行时生效的时区。默认值为
SYSTEM。 -
EVENT_BODY事件的
DO子句中语句的语言。该值始终为SQL。 -
EVENT_DEFINITION事件的
DO子句组成的 SQL 语句的文本;换句话说,此事件执行的语句。 -
EVENT_TYPE事件重复类型,可以是
ONE TIME(瞬时)或RECURRING(重复)。 -
EXECUTE_AT对于一次性事件,这是在
CREATE EVENT语句的AT子句中指定的DATETIME值,用于创建事件的最后一个ALTER EVENT语句,或修改事件的最后一个语句。此列中显示的值反映了事件的AT子句中包含的任何INTERVAL值的加法或减法。例如,如果使用ON SCHEDULE AT CURRENT_TIMESTAMP + '1:6' DAY_HOUR创建事件,并且事件在 2018-02-09 14:05:30 创建,则此列中显示的值将为'2018-02-10 20:05:30'。如果事件的时间由EVERY子句确定而不是AT子句(即,如果事件是重复的),则此列的值为NULL。 -
INTERVAL_VALUE对于重复事件,事件执行之间等待的间隔数。对于瞬时事件,该值始终为
NULL。 -
INTERVAL_FIELD用于重复事件等待重复之前的间隔的时间单位。对于瞬时事件,该值始终为
NULL。 -
SQL_MODE创建或更改事件时生效的 SQL 模式,以及事件执行时使用的模式。有关允许的值,请参见第 7.1.11 节“服务器 SQL 模式”。
-
STARTS重复事件的开始日期和时间。 这显示为
DATETIME值,并且如果未为事件定义开始日期和时间,则为NULL。 对于瞬时事件,此列始终为NULL。 对于定义包含STARTS子句的重复事件,此列包含相应的DATETIME值。 与EXECUTE_AT列一样,此值解析任何使用的表达式。 如果没有STARTS子句影响事件的时间,此��为NULL。 -
ENDS对于定义包含
ENDS子句的重复事件,此列包含相应的DATETIME值。 与EXECUTE_AT列一样,此值解析任何使用的表达式。 如果没有ENDS子句影响事件的时间,此列为NULL。 -
STATUS事件状态。
ENABLED、DISABLED或SLAVESIDE_DISABLED中的一个。SLAVESIDE_DISABLED表示事件的创建发生在另一个充当复制源的 MySQL 服务器上,并被复制到当前充当副本的 MySQL 服务器,但事件目前未在副本上执行。 有关更多信息,请参见 Section 19.5.1.16, “Replication of Invoked Features”。 -
ON_COMPLETION两个值之一
PRESERVE或NOT PRESERVE。 -
CREATED事件创建的日期和时间。 这是一个
TIMESTAMP值。 -
LAST_ALTERED事件上次修改的日期和时间。 这是一个
TIMESTAMP值。 如果事件自创建以来未被修改,则此值与CREATED值相同。 -
LAST_EXECUTED事件上次执行的日期和时间。 这是一个
DATETIME值。 如果事件从未执行过,则此列为NULL。LAST_EXECUTED表示事件开始的时间。 因此,ENDS列永远不会小于LAST_EXECUTED。 -
EVENT_COMMENT如果事件有评论,则为评论的文本。 如果没有,则此值为空。
-
ORIGINATORMySQL 服务器的服务器 ID,在该服务器上创建事件时使用;用于复制。 如果在复制源上执行,则此值可能会由
ALTER EVENT更新为发生该语句的服务器的服务器 ID。 默认值为 0。 -
CHARACTER_SET_CLIENT事件创建时的
character_set_client系统变量的会话值。 -
COLLATION_CONNECTION事件创建时用户
'jon'@'ghidora'的collation_connection系统变量的会话值。 -
DATABASE_COLLATION与事件关联的数据库的排序规则。
注意
-
EVENTS是一个非标准的INFORMATION_SCHEMA表。 -
EVENTS表中的时间使用事件时区、当前会话时区或 UTC 显示,如 Section 27.4.4, “事件元数据” 中所述。 -
有关
SLAVESIDE_DISABLED和ORIGINATOR列的更多信息,请参见 Section 19.5.1.16, “调用特性的复制”。
例子
假设用户 'jon'@'ghidora' 创建了一个名为 e_daily 的事件,然后几分钟后使用 ALTER EVENT 语句对其进行修改,如下所示:
DELIMITER |
CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END |
DELIMITER ;
ALTER EVENT e_daily
ENABLE;
(注意,注释可以跨越多行。)
然后,该用户可以运行以下 SELECT 语句,并获得如下输出:
mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_NAME = 'e_daily'
AND EVENT_SCHEMA = 'myschema'\G
*************************** 1\. row ***************************
EVENT_CATALOG: def
EVENT_SCHEMA: myschema
EVENT_NAME: e_daily
DEFINER: jon@ghidora
TIME_ZONE: SYSTEM
EVENT_BODY: SQL
EVENT_DEFINITION: BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 1
INTERVAL_FIELD: DAY
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_ENGINE_SUBSTITUTION
STARTS: 2018-08-08 11:06:34
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: NOT PRESERVE
CREATED: 2018-08-08 11:06:34
LAST_ALTERED: 2018-08-08 11:06:34
LAST_EXECUTED: 2018-08-08 16:06:34
EVENT_COMMENT: Saves total number of sessions then clears the
table each day
ORIGINATOR: 1
CHARACTER_SET_CLIENT: utf8mb4
COLLATION_CONNECTION: utf8mb4_0900_ai_ci
DATABASE_COLLATION: utf8mb4_0900_ai_ci
事件信息也可以通过 SHOW EVENTS 语句获取。参见 Section 15.7.7.18, “SHOW EVENTS 语句”。以下语句是等效的:
SELECT
EVENT_SCHEMA, EVENT_NAME, DEFINER, TIME_ZONE, EVENT_TYPE, EXECUTE_AT,
INTERVAL_VALUE, INTERVAL_FIELD, STARTS, ENDS, STATUS, ORIGINATOR,
CHARACTER_SET_CLIENT, COLLATION_CONNECTION, DATABASE_COLLATION
FROM INFORMATION_SCHEMA.EVENTS
WHERE table_schema = '*db_name*'
[AND column_name LIKE '*wild*']
SHOW EVENTS
[FROM *db_name*]
[LIKE '*wild*']
28.3.15 INFORMATION_SCHEMA FILES 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-files-table.html
FILES表提供关于存储 MySQL 表空间数据的文件的信息。
FILES表提供关于InnoDB数据文件的信息。在 NDB 集群中,此表还提供 NDB 集群磁盘数据表存储的文件信息。有关特定于InnoDB的其他信息,请参见本节后面的 InnoDB 注释;有关特定于 NDB 集群的其他信息,请参见 NDB 注释。
FILES表具有以下列:
-
FILE_ID对于
InnoDB:表空间 ID,也称为space_id或fil_space_t::id。对于
NDB:文件标识符。FILE_ID列值是自动生成的。 -
FILE_NAME对于
InnoDB:数据文件的名称。每个表和通用表空间都有一个.ibd文件扩展名。撤销表空间以undo为前缀。系统表空间以ibdata为前缀。全局临时表空间以ibtmp为前缀。文件名包括文件路径,可能相对于 MySQL 数据目录(datadir系统变量的值)。对于
NDB:由CREATE LOGFILE GROUP或ALTER LOGFILE GROUP创建的撤销日志文件的名称,或由CREATE TABLESPACE或ALTER TABLESPACE创建的数据文件的名称。在 NDB 8.0 中,文件名显示为相对路径;对于撤销日志文件,此路径相对于目录DataDir`/ndb_`NodeId`_fs/LG`;对于数据文件,相对于目录DataDir/ndb_NodeId_fs/TS。这意味着,例如,使用ALTER TABLESPACE ts ADD DATAFILE 'data_2.dat' INITIAL SIZE 256M创建的数据文件的名称显示为./data_2.dat。 -
FILE_TYPE对于
InnoDB:表空间文件类型。对于InnoDB文件,有三种可能的文件类型。TABLESPACE是任何系统、通用或每个表的表空间文件的文件类型,用于保存表、索引或其他形式的用户数据。TEMPORARY是临时表空间的文件类型。UNDO LOG是撤销表空间的文件类型,用于保存撤销记录。对于
NDB:值之一为UNDO LOG或DATAFILE。在 NDB 8.0.13 之前,TABLESPACE也是可能的值。 -
TABLESPACE_NAME与文件关联的表空间的名称。
对于
InnoDB:一般表空间名称在创建时指定。每表每文件表空间名称显示格式如下:*schema_name*/*table_name*。InnoDB系统表空间名称为innodb_system。全局临时表空间名称为innodb_temporary。默认撤销表空间名称��inndb_undo_001和inndb_undo_002。用户创建的撤销表空间名称在创建时指定。 -
TABLE_CATALOG此值始终为空。
-
TABLE_SCHEMA这总是
NULL。 -
TABLE_NAME这总是
NULL。 -
LOGFILE_GROUP_NAME对于
InnoDB:这总是NULL。对于
NDB:日志文件或数据文件所属的日志文件组的名称。 -
LOGFILE_GROUP_NUMBER对于
InnoDB:这总是NULL。对于
NDB:对于磁盘数据撤销日志文件,日志文件所属的日志文件组的自动生成的 ID 号。这与ndbinfo.dict_obj_info表中的id列和ndbinfo.logspaces表中的log_id列以及此撤销日志文件的ndbinfo.logspaces表中的值相同。 -
ENGINE对于
InnoDB:此值始终为InnoDB。对于
NDB:此值始终为ndbcluster。 -
FULLTEXT_KEYS这总是
NULL。 -
DELETED_ROWS这总是
NULL。 -
UPDATE_COUNT这总是
NULL。 -
FREE_EXTENTS对于
InnoDB:当前数据文件中完全空闲的扩展数。对于
NDB:尚未被文件使用的扩展数。 -
TOTAL_EXTENTS对于
InnoDB:当前数据文件中使用的完整扩展数。文件末尾的任何部分扩展都不计算在内。对于
NDB:分配给文件的总扩展数。 -
EXTENT_SIZE对于
InnoDB:对于具有 4KB、8KB 或 16KB 页面大小的文件,扩展大小为 1048576(1MB)。对于具有 32KB 页面大小的文件,扩展大小为 2097152 字节(2MB),对于具有 64KB 页面大小的文件,扩展大小为 4194304(4MB)。FILES不报告InnoDB页面大小。页面大小由innodb_page_size系统变量定义。扩展大小信息也可以从INNODB_TABLESPACES表中检索,其中FILES.FILE_ID = INNODB_TABLESPACES.SPACE。对于
NDB:文件的扩展大小(以字节为单位)。 -
INITIAL_SIZE对于
InnoDB:文件的初始大小(以字节为单位)。对于
NDB:文件的大小(以字节为单位)。这是在CREATE LOGFILE GROUP、ALTER LOGFILE GROUP、CREATE TABLESPACE或ALTER TABLESPACE语句中用于创建文件的INITIAL_SIZE子句中使用的相同值。 -
MAXIMUM_SIZE对于
InnoDB:文件中允许的最大字节数。对于除了预定义系统表空间数据文件之外的所有数据文件,该值为NULL。最大系统表空间文件大小由innodb_data_file_path定义。最大全局临时表空间文件大小由innodb_temp_data_file_path定义。对于预定义系统表空间数据文件的NULL值表示未明确定义文件大小限制。对于
NDB:此值始终与INITIAL_SIZE值相同。 -
AUTOEXTEND_SIZE表空间的自动扩展大小。对于
NDB,AUTOEXTEND_SIZE始终为NULL。 -
CREATION_TIME这始终为
NULL。 -
LAST_UPDATE_TIME这始终为
NULL。 -
LAST_ACCESS_TIME这始终为
NULL。 -
RECOVER_TIME这始终为
NULL。 -
TRANSACTION_COUNTER这始终为
NULL。 -
VERSION对于
InnoDB:这始终为NULL。对于
NDB:文件的版本号。 -
ROW_FORMAT对于
InnoDB:这始终为NULL。对于
NDB:FIXED或DYNAMIC之一。 -
TABLE_ROWS这始终为
NULL。 -
AVG_ROW_LENGTH这始终为
NULL。 -
DATA_LENGTH这始终为
NULL。 -
MAX_DATA_LENGTH这始终为
NULL。 -
INDEX_LENGTH这始终为
NULL。 -
DATA_FREE对于
InnoDB:整个表空间的空闲空间总量(以字节为单位)。预定义系统表空间,包括系统表空间和临时表表空间,可能有一个或多个数据文件。对于
NDB:这始终为NULL。 -
CREATE_TIME这始终为
NULL。 -
UPDATE_TIME这始终为
NULL。 -
CHECK_TIME这始终为
NULL。 -
CHECKSUM这始终为
NULL。 -
STATUS对于
InnoDB:默认情况下,此值为NORMAL。InnoDB文件表表空间可能报告IMPORTING,表示表空间尚不可用。对于
NDB:对于 NDB Cluster Disk Data 文件,此值始终为NORMAL。 -
EXTRA对于
InnoDB:这始终为NULL。对于
NDB:(NDB 8.0.15 及更高版本)对于撤销日志文件,此列显示撤销日志缓冲区大小;对于数据文件,始终为NULL。下面几段提供了更详细的解释。NDBCLUSTER在集群中的每个数据节点上存储每个数据文件和每个撤销日志文件的副本。在 NDB 8.0.13 及更高版本中,FILES表仅包含每个此类文件的一行。假设您在具有四个数据节点的 NDB 集群上运行以下两个语句:CREATE LOGFILE GROUP mygroup ADD UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G ENGINE NDBCLUSTER; CREATE TABLESPACE myts ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP mygroup INITIAL_SIZE 256M ENGINE NDBCLUSTER;运行这两个语句成功后,您应该看到与针对
FILES表的查询所示的结果类似的结果:mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA -> FROM INFORMATION_SCHEMA.FILES -> WHERE ENGINE = 'ndbcluster'; +--------------------+-----------+--------------------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-----------+--------------------------+ | mygroup | UNDO LOG | UNDO_BUFFER_SIZE=8388608 | | mygroup | DATAFILE | NULL | +--------------------+-----------+--------------------------+NDB 8.0.13 中意外删除了撤销日志缓冲区大小信息,但在 NDB 8.0.15 中恢复了。(Bug #92796,Bug #28800252)
在 NDB 8.0.13 之前,
FILES表对于每个数据节点上的每个文件都包含一行,以及其撤销缓冲区的大小。在这些版本中,相同查询的结果每个数据节点包含一行,如下所示:+--------------------+-----------+-----------------------------------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-----------+-----------------------------------------+ | mygroup | UNDO LOG | CLUSTER_NODE=5;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=6;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=7;UNDO_BUFFER_SIZE=8388608 | | mygroup | UNDO LOG | CLUSTER_NODE=8;UNDO_BUFFER_SIZE=8388608 | | mygroup | DATAFILE | CLUSTER_NODE=5 | | mygroup | DATAFILE | CLUSTER_NODE=6 | | mygroup | DATAFILE | CLUSTER_NODE=7 | | mygroup | DATAFILE | CLUSTER_NODE=8 | +--------------------+-----------+-----------------------------------------+
注意
-
FILES是一个非标准的INFORMATION_SCHEMA表。 -
截至 MySQL 8.0.21,您必须具有
PROCESS权限才能查询此表。
InnoDB 注意事项
以下注意事项适用于InnoDB数据文件。
-
FILES报告的信息是从InnoDB内存中的打开文件缓存中获取的,而INNODB_DATAFILES从InnoDB的SYS_DATAFILES内部数据字典表中获取数据。 -
FILES提供的信息包括全局临时表空间信息,这些信息在InnoDB的SYS_DATAFILES内部数据字典表中不可用,因此不包括在INNODB_DATAFILES中。 -
当存在单独的撤销表空间时,
FILES中显示撤销表空间信息,这在 MySQL 8.0 中是默认情况。 -
以下查询返回与
InnoDB表空间相关的所有FILES表信息。SELECT FILE_ID, FILE_NAME, FILE_TYPE, TABLESPACE_NAME, FREE_EXTENTS, TOTAL_EXTENTS, EXTENT_SIZE, INITIAL_SIZE, MAXIMUM_SIZE, AUTOEXTEND_SIZE, DATA_FREE, STATUS FROM INFORMATION_SCHEMA.FILES WHERE ENGINE='InnoDB'\G
NDB 注意事项
-
FILES表仅提供有关磁盘数据文件的信息;您不能用它来确定单个NDB表的磁盘空间分配或可用性。但是,可以使用ndb_desc来查看每个存储在磁盘上的NDB表分配了多少空间,以及该表在磁盘上存储数据的剩余可用空间。 -
从 NDB 8.0.29 开始,
FILES表中的许多信息也可以在ndbinfo.files表中找到。 -
CREATION_TIME、LAST_UPDATE_TIME和LAST_ACCESSED的值由操作系统报告,而不是由NDB存储引擎提供。如果操作系统未提供值,则这些列显示NULL。 -
TOTAL EXTENTS和FREE_EXTENTS列之间的差值是当前文件使用的区段数:SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';要近似计算文件使用的磁盘空间量,请将该差值乘以
EXTENT_SIZE列的值,该值表示文件的一个区段的大小(以字节为单位):SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE AS bytes_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';同样,可以通过将
FREE_EXTENTS乘以EXTENT_SIZE来估算给定文件中剩余可用空间的量:SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = './myfile.dat';重要提示
前述查询产生的字节值仅为近似值,其精度与
EXTENT_SIZE的值成反比。也就是说,EXTENT_SIZE越大,近似值的准确性就越低。还要记住,一旦使用了一个区段,就不能再次释放它,除非删除包含它的数据文件。这意味着从磁盘数据表中删除的数据不会释放磁盘空间。
可以在
CREATE TABLESPACE语句中设置区段大小。有关更多信息,请参见第 15.1.21 节,“CREATE TABLESPACE Statement”。 -
在 NDB 8.0.13 之前,在创建日志文件组后,
FILES表中存在一个额外的行,FILE_NAME列中为NULL。在 NDB 8.0.13 及更高版本中,不再显示这一行—该行不对应任何文件,并且需要查询ndbinfo.logspaces表以获取撤销日志文件使用信息。有关更多信息,请参见此表的描述以及第 25.6.11.1 节,“NDB Cluster Disk Data Objects”。本项目中剩余的讨论仅适用于 NDB 8.0.12 及更早版本。对于
FILE_NAME列中为NULL的行,FILE_ID列的值始终为0,FILE_TYPE列的值始终为UNDO LOG,STATUS列的值始终为NORMAL。ENGINE列的值始终为ndbcluster。在此行中,
FREE_EXTENTS列显示给定日志文件组的所有撤销文件可用的总空闲区段数,其名称和编号分别显示在LOGFILE_GROUP_NAME和LOGFILE_GROUP_NUMBER列中。假设您的 NDB Cluster 上没有现有的日志文件组,并且使用以下语句创建一个:
mysql> CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undofile.dat' INITIAL_SIZE = 16M UNDO_BUFFER_SIZE = 1M ENGINE = NDB;当您查询
FILES表时,现在可以看到这个NULL行:mysql> SELECT DISTINCT FILE_NAME AS File, FREE_EXTENTS AS Free, TOTAL_EXTENTS AS Total, EXTENT_SIZE AS Size, INITIAL_SIZE AS Initial FROM INFORMATION_SCHEMA.FILES; +--------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +--------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | NULL | 4184068 | NULL | 4 | NULL | +--------------+---------+---------+------+----------+用于撤消日志记录的可用自由扩展总数始终略少于日志文件组中所有撤消文件的
TOTAL_EXTENTS列值之和,这是由于维护撤消文件所需的开销。可以通过向日志文件组添加第二个撤消文件,然后针对FILES表重复上一个查询来看到这一点:mysql> ALTER LOGFILE GROUP lg1 ADD UNDOFILE 'undofile02.dat' INITIAL_SIZE = 4M ENGINE = NDB; mysql> SELECT DISTINCT FILE_NAME AS File, FREE_EXTENTS AS Free, TOTAL_EXTENTS AS Total, EXTENT_SIZE AS Size, INITIAL_SIZE AS Initial FROM INFORMATION_SCHEMA.FILES; +----------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +----------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | undofile02.dat | NULL | 1048576 | 4 | 4194304 | | NULL | 5223944 | NULL | 4 | NULL | +----------------+---------+---------+------+----------+通过将自由扩展的数量乘以初始大小来近似计算使用此日志文件组的磁盘数据表的撤消日志记录的可用空间的字节数:
mysql> SELECT FREE_EXTENTS AS 'Free Extents', FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' FROM INFORMATION_SCHEMA.FILES WHERE LOGFILE_GROUP_NAME = 'lg1' AND FILE_NAME IS NULL; +--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5223944 | 20895776 | +--------------+------------+如果您创建了一个 NDB 集群磁盘数据表,并插入了一些行,您可以看到之后大约还有多少空间用于撤消日志记录,例如:
mysql> CREATE TABLESPACE ts1 ADD DATAFILE 'data1.dat' USE LOGFILE GROUP lg1 INITIAL_SIZE 512M ENGINE = NDB; mysql> CREATE TABLE dd ( c1 INT NOT NULL PRIMARY KEY, c2 INT, c3 DATE ) TABLESPACE ts1 STORAGE DISK ENGINE = NDB; mysql> INSERT INTO dd VALUES (NULL, 1234567890, '2007-02-02'), (NULL, 1126789005, '2007-02-03'), (NULL, 1357924680, '2007-02-04'), (NULL, 1642097531, '2007-02-05'); mysql> SELECT FREE_EXTENTS AS 'Free Extents', FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' FROM INFORMATION_SCHEMA.FILES WHERE LOGFILE_GROUP_NAME = 'lg1' AND FILE_NAME IS NULL; +--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5207565 | 20830260 | +--------------+------------+ -
在 NDB 8.0.13 之前,
FILES表中为每个 NDB 集群磁盘数据表空间存在额外的行。因为它不对应实际文件,所以在 NDB 8.0.13 中被移除。该行的FILE_NAME列值为NULL,FILE_ID列值始终为0,FILE_TYPE列值始终为TABLESPACE,STATUS列值始终为NORMAL,ENGINE列值始终为NDBCLUSTER。在 NDB 8.0.13 及更高版本中,您可以使用 ndb_desc 实用程序获取有关磁盘数据表空间的信息。有关更多信息,请参阅 第 25.6.11.1 节,“NDB 集群磁盘数据对象” 的描述,以及 ndb_desc 的说明。
-
有关更多信息以及有关创建、删除和获取有关 NDB 集群磁盘数据对象的示例,请参阅 第 25.6.11 节,“NDB 集群磁盘数据表”。
28.3.16 INFORMATION_SCHEMA KEY_COLUMN_USAGE 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-key-column-usage-table.html
KEY_COLUMN_USAGE 表描述了哪些关键列具有约束。该表不提供有关功能键部分的信息,因为它们是表达式,而该表仅提供有关列的信息。
KEY_COLUMN_USAGE 表具有以下列:
-
CONSTRAINT_CATALOG约束所属的目录的名称。此值始终为
def。 -
CONSTRAINT_SCHEMA约束所属的模式(数据库)的名称。
-
CONSTRAINT_NAME约束的名称。
-
TABLE_CATALOG表所属的目录的名称。此值始终为
def。 -
TABLE_SCHEMA表所属的模式(数据库)的名称。
-
TABLE_NAME具有约束的表的名称。
-
COLUMN_NAME具有约束的列的名称。
如果约束是外键,则这是外键的列,而不是外键引用的列。
-
ORDINAL_POSITION列在约束中的位置,而不是表中的列位置。列位置从 1 开始编号。
-
POSITION_IN_UNIQUE_CONSTRAINT对于唯一约束和主键约束为
NULL。对于外键约束,此列是被引用的表中键的序数位置。 -
REFERENCED_TABLE_SCHEMA约束引用的模式的名称。
-
REFERENCED_TABLE_NAME约束引用的表的名称。
-
REFERENCED_COLUMN_NAME约束引用的列的名称。
假设有两个名为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 表有两行:
-
具有
CONSTRAINT_NAME='PRIMARY'、TABLE_NAME='t1'、COLUMN_NAME='s3'、ORDINAL_POSITION=1、POSITION_IN_UNIQUE_CONSTRAINT=NULL的一行。对于
NDB:此值始终为NULL。 -
具有
CONSTRAINT_NAME='CO'、TABLE_NAME='t3'、COLUMN_NAME='s2'、ORDINAL_POSITION=1、POSITION_IN_UNIQUE_CONSTRAINT=1的一行。
28.3.17 INFORMATION_SCHEMA KEYWORDS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-keywords-table.html
KEYWORDS 表列出了 MySQL 认为是关键字的单词,并针对每个单词指示它是否是保留的。在某些情况下,保留关键字可能需要特殊处理,例如在用作标识符时需要特殊引用(参见第 11.3 节,“关键字和保留字”)。这个表为应用程序提供了 MySQL 关键字信息的运行时来源。
在 MySQL 8.0.13 之前,选择KEYWORDS表而没有选择默认数据库会产生错误。(Bug #90160, Bug #27729859)
KEYWORDS 表具有以下列:
-
WORD关键字。
-
RESERVED一个整数,指示关键字是保留的(1)还是非保留的(0)。
这些查询分别列出所有关键字、所有保留关键字和所有非保留关键字:
SELECT * FROM INFORMATION_SCHEMA.KEYWORDS;
SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;
SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 0;
后两个查询等同于:
SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED;
SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE NOT RESERVED;
如果你从源代码构建 MySQL,构建过程会生成一个keyword_list.h头文件,其中包含关键字及其保留状态的数组。该文件可以在构建目录下的sql目录中找到。对于需要关键字列表的应用程序,这个文件可能很有用。
28.3.18 信息模式 ndb_transid_mysql_connection_map 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-ndb-transid-mysql-connection-map-table.html
ndb_transid_mysql_connection_map表提供了NDB事务、NDB事务协调器和连接到 NDB 集群作为 API 节点的 MySQL 服务器之间的映射。在填充server_operations和server_transactions表时,将使用此信息ndbinfo NDB 集群信息数据库。
INFORMATION_SCHEMA名称 | SHOW名称 | 备注 |
|---|---|---|
mysql_connection_id | MySQL 服务器连接 ID | |
node_id | 事务协调器节点 ID | |
ndb_transid | NDB事务 ID |
mysql_connection_id与SHOW PROCESSLIST输出中显示的连接或会话 ID 相同。
与此表相关联的SHOW语句不存在。
这是一个非标准表,特定于 NDB 集群。它作为一个INFORMATION_SCHEMA插件实现;您可以通过检查SHOW PLUGINS的输出来验证它是否受支持。如果启用了ndb_transid_mysql_connection_map支持,此语句的输出将包括一个具有此名称的插件,类型为INFORMATION SCHEMA,并且状态为ACTIVE,如下所示(使用强调文本):
mysql> SHOW PLUGINS;
+----------------------------------+--------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+----------------------------------+--------+--------------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| caching_sha2_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha2_cache_cleaner | ACTIVE | AUDIT | NULL | GPL |
| daemon_keyring_proxy_plugin | ACTIVE | DAEMON | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
...
| INNODB_SESSION_TEMP_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| TempTable | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbcluster | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbinfo | ACTIVE | STORAGE ENGINE | NULL | GPL |
*| ndb_transid_mysql_connection_map | ACTIVE | INFORMATION SCHEMA | NULL | GPL |*
| ngram | ACTIVE | FTPARSER | NULL | GPL |
| mysqlx_cache_cleaner | ACTIVE | AUDIT | NULL | GPL |
| mysqlx | ACTIVE | DAEMON | NULL | GPL |
+----------------------------------+--------+--------------------+---------+---------+
47 rows in set (0.01 sec)
插件默认启用。您可以通过使用--ndb-transid-mysql-connection-map选项启动服务器来禁用它(或者强制服务器不运行,除非插件启动)。如果插件被禁用,状态将显示为SHOW PLUGINS中的DISABLED。插件无法在运行时启用或禁用。
尽管此表及其列的名称以小写显示,但在 SQL 语句中引用它们时,可以使用大写或小写。
要创建此表,MySQL 服务器必须是与 NDB 集群分发一起提供的二进制文件,或者是从启用了NDB存储引擎支持的 NDB 集群源代码构建的。它在标准 MySQL 8.0 服务器中不可用。
28.3.19 INFORMATION_SCHEMA OPTIMIZER_TRACE 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-optimizer-trace-table.html
OPTIMIZER_TRACE 表提供了由优化器追踪功能为被追踪语句生成的信息。要启用跟踪,请使用optimizer_trace 系统变量。有关详细信息,请参阅 MySQL 内部:跟踪优化器。
OPTIMIZER_TRACE 表包含以下列:
-
QUERY被追踪语句的文本。
-
TRACE追踪内容,以
JSON格式。 -
MISSING_BYTES_BEYOND_MAX_MEM_SIZE每个记忆的追踪都是一个字符串,随着优化的进行而扩展并向其附加数据。
optimizer_trace_max_mem_size变量设置了当前所有记忆追踪使用的内存总量的限制。如果达到此限制,当前追踪不会被扩展(因此是不完整的),MISSING_BYTES_BEYOND_MAX_MEM_SIZE列显示了追踪中缺少的字节数。 -
INSUFFICIENT_PRIVILEGES如果被追踪的查询使用了具有
SQL SECURITY值为DEFINER的视图或存储过程,可能会导致除定义者以外的用户无法查看查询的追踪。在这种情况下,追踪显示为空,INSUFFICIENT_PRIVILEGES的值为 1。否则,该值为 0。
28.3.20 INFORMATION_SCHEMA PARAMETERS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-parameters-table.html
PARAMETERS表提供有关存储例程(存储过程和存储函数)的参数以及存储函数的返回值的信息。PARAMETERS表不包括内置(本机)函数或可加载函数。
PARAMETERS表具有以下列:
-
SPECIFIC_CATALOG包含参数的例程所属的目录的名称。该值始终为
def。 -
SPECIFIC_SCHEMA包含参数的例程所属的模式(数据库)的名称。
-
SPECIFIC_NAME包含参数的例程名称。
-
ORDINAL_POSITION对于存储过程或函数的连续参数,
ORDINAL_POSITION值为 1、2、3 等。对于存储函数,还有一行适用于函数返回值(由RETURNS子句描述)。返回值不是真正的参数,因此描述它的行具有以下独特特征:-
ORDINAL_POSITION值为 0。 -
PARAMETER_NAME和PARAMETER_MODE值为NULL,因为返回值没有名称,模式也不适用。
-
-
PARAMETER_MODE参数的模式。该值为
IN、OUT或INOUT之一。对于存储函数的返回值,该值为NULL。 -
PARAMETER_NAME参数的名称。对于存储函数的返回值,该值为
NULL。 -
DATA_TYPE参数数据类型。
DATA_TYPE值仅为类型名称,没有其他信息。DTD_IDENTIFIER值包含类型名称,可能还包含其他信息,如精度或长度。 -
CHARACTER_MAXIMUM_LENGTH对于字符串参数,以字符为单位的最大长度。
-
CHARACTER_OCTET_LENGTH对于字符串参数,以字节为单位的最大长度。
-
NUMERIC_PRECISION对于数值参数,数值精度。
-
NUMERIC_SCALE对于数值参数,数值刻度。
-
DATETIME_PRECISION对于时间参数,分数秒精度。
-
CHARACTER_SET_NAME对于字符串参数,字符集名称。
-
COLLATION_NAME对于字符串参数,排序名称。
-
DTD_IDENTIFIER参数数据类型。
DATA_TYPE值仅为类型名称,没有其他信息。DTD_IDENTIFIER值包含类型名称,可能还包含其他信息,如精度或长度。 -
ROUTINE_TYPE对于存储过程,
PROCEDURE,对于存储函数,FUNCTION。
28.3.21 INFORMATION_SCHEMA PARTITIONS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-partitions-table.html
PARTITIONS 表提供有关表分区的信息。该表中的每一行对应��分区表的单个分区或子分区。有关分区表的更多信息,请参阅 第二十六章,“分区”。
PARTITIONS 表包含以下列:
-
TABLE_CATALOG表所属的目录的名称。该值始终为
def。 -
TABLE_SCHEMA表所属模式(数据库)的名称。
-
TABLE_NAME包含分区的表的名称。
-
PARTITION_NAME分区的名称。
-
SUBPARTITION_NAME如果
PARTITIONS表行表示子分区,则为子分区的名称;否则为NULL。对于
NDB:该值始终为NULL。 -
PARTITION_ORDINAL_POSITION所有分区按照定义的顺序进行索引,其中
1是分配给第一个分区的编号。随着分区的添加、删除和重新组织,索引可能会发生变化;此列中显示的编号反映了当前顺序,考虑到任何索引更改。 -
SUBPARTITION_ORDINAL_POSITION在给定分区内的子分区也按照表内分区的方式进行索引和重新索引。
-
PARTITION_METHOD值为
RANGE、LIST、HASH、LINEAR HASH、KEY或LINEAR KEY中的一个;即 26.2 节,“分区类型” 中讨论的可用分区类型之一。 -
SUBPARTITION_METHOD值为
HASH、LINEAR HASH、KEY或LINEAR KEY中的一个;即 26.2.6 节,“子分区” 中讨论的可用子分区类型之一。 -
PARTITION_EXPRESSION在创建表的
CREATE TABLE或ALTER TABLE语句中使用的分区函数的表达式,该表达式创建了表的当前分区方案。例如,考虑在
test数据库中使用以下语句创建的分区表:CREATE TABLE tp ( c1 INT, c2 INT, c3 VARCHAR(25) ) PARTITION BY HASH(c1 + c2) PARTITIONS 4;PARTITIONS表中来自此表分区的PARTITIONS表行中的PARTITION_EXPRESSION列显示c1 + c2,如下所示:mysql> SELECT DISTINCT PARTITION_EXPRESSION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='tp' AND TABLE_SCHEMA='test'; +----------------------+ | PARTITION_EXPRESSION | +----------------------+ | c1 + c2 | +----------------------+对于未明确分区的表,无论存储引擎如何,此列始终为
NULL。 -
SUBPARTITION_EXPRESSION这与定义表的分区表达式的子分区表达式的工作方式相同,就像
PARTITION_EXPRESSION为定义表的分区而使用的分区表达式一样。如果表没有子分区,这一列为
NULL。 -
PARTITION_DESCRIPTION此列用于
RANGE和LIST分区。对于RANGE分区,它包含在分区的VALUES LESS THAN子句中设置的值,可以是整数或MAXVALUE。对于LIST分区,此列包含在分区的VALUES IN子句中定义的值,这是一个逗号分隔的整数值列表。对于
PARTITION_METHOD不是RANGE或LIST的分区,此列始终为NULL。 -
TABLE_ROWS分区中的表行数。
对于分区的
InnoDB表,TABLE_ROWS列中给出的行数仅是 SQL 优化中使用的估计值,可能并不总是准确。对于
NDB表,您还可以使用ndb_desc实用程序获取此信息。 -
AVG_ROW_LENGTH存储在此分区或子分区中的行的平均长度,以字节为单位。这与
DATA_LENGTH除以TABLE_ROWS相同。对于
NDB表,您还可以使用ndb_desc实用程序获取此信息。 -
DATA_LENGTH存储在此分区或子分区中的所有行的总长度,以字节为单位;即存储在分区或子分区中的字节总数。
对于
NDB表,您还可以使用ndb_desc实用程序获取此信息。 -
MAX_DATA_LENGTH可以存储在此分区或子分区中的最大字节数。
对于
NDB表,您还可以使用ndb_desc实用程序获取此信息。 -
INDEX_LENGTH此分区或子分区的索引文件长度,以字节为单位。
对于
NDB表的分区,无论表是否使用隐式或显式分区,INDEX_LENGTH列的值始终为 0。但是,您可以使用ndb_desc实用程序获取等效信息。 -
DATA_FREE分配给分区或子分区但未使用的字节数。
对于
NDB表,您还可以使用ndb_desc实用程序获取此信息。 -
CREATE_TIME分区或子分区创建的时间。
-
UPDATE_TIME分区或子分区上次修改的时间。
-
CHECK_TIME此分区或子分区所属表上次检查的时间。
对于分区的
InnoDB表,该值始终为NULL。 -
CHECKSUM校验和值(如果有);否则为
NULL。 -
PARTITION_COMMENT如果分区有评论,则评论的文本。如果没有,则该值为空。
分区评论的最大长度定义为 1024 个字符,
PARTITION_COMMENT列的显示宽度也是 1024 个字符,以匹配此限制。 -
NODEGROUP分区所属的节点组。对于 NDB 集群表,始终为
default。对于使用除NDB之外的存储引擎的分区表,该值也为default。否则,此列为空。 -
TABLESPACE_NAME分区所属表空间的名称。该值始终为
DEFAULT,除非表使用NDB存储引擎(请参阅本节末尾的注释)。
注释
-
PARTITIONS是一个非标准的INFORMATION_SCHEMA表。 -
使用除
NDB之外的任何存储引擎并且未分区的表在PARTITIONS表中有一行。但是,PARTITION_NAME、SUBPARTITION_NAME、PARTITION_ORDINAL_POSITION、SUBPARTITION_ORDINAL_POSITION、PARTITION_METHOD、SUBPARTITION_METHOD、PARTITION_EXPRESSION、SUBPARTITION_EXPRESSION和PARTITION_DESCRIPTION列的值均为NULL。此外,在这种情况下,PARTITION_COMMENT列为空。 -
在
NDB集群中,未明确分区的NDB表在PARTITIONS表中为每个数据节点有一行。对于每一行:-
SUBPARTITION_NAME、SUBPARTITION_ORDINAL_POSITION、SUBPARTITION_METHOD、PARTITION_EXPRESSION、SUBPARTITION_EXPRESSION、CREATE_TIME、UPDATE_TIME、CHECK_TIME、CHECKSUM和TABLESPACE_NAME列均为NULL。 -
PARTITION_METHOD始终为AUTO。 -
NODEGROUP列为default。 -
PARTITION_COMMENT列为空。
-
28.3.22 INFORMATION_SCHEMA PLUGINS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-plugins-table.html
PLUGINS 表提供有关服务器插件的信息。
PLUGINS 表具有以下列:
-
PLUGIN_NAME在诸如
INSTALL PLUGIN和UNINSTALL PLUGIN等语句中用于引用插件的名称。 -
PLUGIN_VERSION插件的一般类型描述符中的版本。
-
PLUGIN_STATUS插件状态,为
ACTIVE、INACTIVE、DISABLED、DELETING或DELETED。 -
PLUGIN_TYPE插件类型,如
STORAGE ENGINE、INFORMATION_SCHEMA或AUTHENTICATION。 -
PLUGIN_TYPE_VERSION插件的特定类型描述符中的版本。
-
PLUGIN_LIBRARY插件共享库文件的名称。这是在诸如
INSTALL PLUGIN和UNINSTALL PLUGIN等语句中用于引用插件文件的名称。此文件位于由plugin_dir系统变量命名的目录中。如果库名称为NULL,则插件已编译并且无法使用UNINSTALL PLUGIN卸载。 -
PLUGIN_LIBRARY_VERSION插件 API 接口版本。
-
PLUGIN_AUTHOR插件作者。
-
PLUGIN_DESCRIPTION插件的简要描述。
-
PLUGIN_LICENSE插件许可证(例如,
GPL)。 -
LOAD_OPTION插件加载方式。值为
OFF、ON、FORCE或FORCE_PLUS_PERMANENT。参见 Section 7.6.1, “Installing and Uninstalling Plugins”。
注意事项
-
PLUGINS是一个非标准的INFORMATION_SCHEMA表。 -
对于使用
INSTALL PLUGIN安装的插件,PLUGIN_NAME和PLUGIN_LIBRARY值也会在mysql.plugin表中注册。 -
有关构���
PLUGINS表信息基础的插件数据结构,请参阅 MySQL 插件 API。
插件信息也可以通过 SHOW PLUGINS 语句获取。参见 Section 15.7.7.25, “SHOW PLUGINS Statement”。这些语句是等效的:
SELECT
PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE,
PLUGIN_LIBRARY, PLUGIN_LICENSE
FROM INFORMATION_SCHEMA.PLUGINS;
SHOW PLUGINS;
28.3.23 信息模式 PROCESSLIST 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-processlist-table.html
重要
INFORMATION_SCHEMA.PROCESSLIST 已弃用,并将在未来的 MySQL 版本中移除。因此,使用此表的 SHOW PROCESSLIST 的实现也已弃用。建议改用性能模式实现的 PROCESSLIST。
MySQL 进程列表显示当前在服务器内执行的线程集合正在执行的操作。PROCESSLIST 表是进程信息的一个来源。要比较此表与其他来源,请参见 进程信息来源。
PROCESSLIST 表具有以下列:
-
ID连接标识符。这是在
SHOW PROCESSLIST语句中显示的相同值,在性能模式threads表中的PROCESSLIST_ID列中显示,并在线程内部由CONNECTION_ID()函数返回。 -
USER发出语句的 MySQL 用户。
system user的值指代服务器生成的非客户端线程,用于内部处理任务,例如,延迟行处理程序线程或在副本主机上使用的 I/O 或 SQL 线程。对于system user,在Host列中没有指定主机。unauthenticated user指代已与客户端连接关联但尚未进行客户端用户认证的线程。event_scheduler指代监视计划事件的线程(参见 第 27.4 节,“使用事件调度程序”)。注意
USER值为system user与SYSTEM_USER权限是不同的。前者指定内部线程。后者区分系统用户和常规用户账户类别(参见 第 8.2.11 节,“账户类别”)。 -
HOST发出语句的客户端的主机名(对于
system user,没有主机)。TCP/IP 连接的主机名以*host_name*:*client_port*的格式报告,以便更容易确定哪个客户端在执行什么操作。 -
DB线程的默认数据库,如果没有选择任何数据库则为
NULL。 -
COMMAND线程代表客户端执行的命令类型,如果会话空闲则为
Sleep。有关线程命令的描述,请参见 Section 10.14, “Examining Server Thread (Process) Information” Information")。此列的值对应于客户端/服务器协议的COM_*xxx*命令和Com_*xxx*状态变量。请参见 Section 7.1.10, “Server Status Variables”。 -
TIME线程在当前状态下已经持续的秒数。对于复制 SQL 线程,该值是最后一个复制事件的时间戳与复制主机的实际时间之间的秒数。请参见 Section 19.2.3, “Replication Threads”。
-
STATE表示线程正在执行的操作、事件或状态。有关
STATE值的描述,请参见 Section 10.14, “Examining Server Thread (Process) Information” Information")。大多数状态对应于非常快速的操作。如果一个线程在给定状态停留了很多秒,可能存在需要调查的问题。
-
INFO线程正在执行的语句,如果没有执行语句则为
NULL。该语句可能是发送到服务器的语句,或者如果语句执行其他语句,则是最内层的语句。例如,如果一个CALL语句执行一个正在执行SELECT语句的存储过程,INFO值显示SELECT语句。
注释
-
PROCESSLIST是一个非标准的INFORMATION_SCHEMA表。 -
类似于
SHOW PROCESSLIST语句的输出,PROCESSLIST表提供了关于所有线程的信息,即使是属于其他用户的线程,如果你拥有PROCESS权限。否则(没有PROCESS权限),非匿名用户可以访问自己线程的信息,但不能访问其他用户的线程,匿名用户无法访问线程信息。 -
如果一个 SQL 语句引用了
PROCESSLIST表,MySQL 会在语句执行开始时一次性填充整个表,因此在语句执行期间存在读一致性。对于多语句事务,不存在读一致性。
以下语句是等价的:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST
28.3.24 INFORMATION_SCHEMA PROFILING 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-profiling-table.html
PROFILING 表提供语句分析信息。其内容对应于 SHOW PROFILE 和 SHOW PROFILES 语句产生的信息(参见 Section 15.7.7.30, “SHOW PROFILE Statement”)。除非将 profiling 会话变量设置为 1,否则该表为空。
注意
该表已被弃用;预计在未来的 MySQL 版本中将被移除。请改用 Performance Schema;参见 Section 29.19.1, “Query Profiling Using Performance Schema”。
PROFILING 表具有以下列:
-
QUERY_ID数字语句标识符。
-
SEQ表示具有相同
QUERY_ID值的行的显示顺序的序列号。 -
STATE应用于行测量的受监视状态。
-
DURATION语句执行在给定状态中保持的时间,以秒为单位。
-
CPU_USER,CPU_SYSTEM用户和系统 CPU 使用时间,以秒为单位。
-
CONTEXT_VOLUNTARY,CONTEXT_INVOLUNTARY发生了多少次自愿和非自愿的上下文切换。
-
BLOCK_OPS_IN,BLOCK_OPS_OUT块输入和输出操作的数量。
-
MESSAGES_SENT,MESSAGES_RECEIVED发送和接收的通信消息数量。
-
PAGE_FAULTS_MAJOR,PAGE_FAULTS_MINOR主要和次要页面错误的数量。
-
SWAPS发生了多少次交换。
-
SOURCE_FUNCTION,SOURCE_FILE, 和SOURCE_LINE表示在源代码中执行的受监视状态的位置。
注意
PROFILING是一个非标准的INFORMATION_SCHEMA表。
也可以从 SHOW PROFILE 和 SHOW PROFILES 语句中获取分析信息。参见 Section 15.7.7.30, “SHOW PROFILE Statement”。例如,以下查询是等效的:
SHOW PROFILE FOR QUERY 2;
SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;
28.3.25 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-referential-constraints-table.html
REFERENTIAL_CONSTRAINTS表提供有关外键的信息。
REFERENTIAL_CONSTRAINTS表具有以下列:
-
CONSTRAINT_CATALOG约束所属的目录的名称。此值始终为
def。 -
CONSTRAINT_SCHEMA约束所属的模式(数据库)的名称。
-
CONSTRAINT_NAME约束的名称。
-
UNIQUE_CONSTRAINT_CATALOG包含约束引用的唯一约束的目录的名称。此值始终为
def。 -
UNIQUE_CONSTRAINT_SCHEMA包含约束引用的唯一约束的模式的名称。
-
UNIQUE_CONSTRAINT_NAME约束引用的唯一约束的名称。
-
MATCH_OPTION约束
MATCH属性的值。目前唯一有效的值是NONE。 -
UPDATE_RULE约束
ON UPDATE属性的值。可能的值为CASCADE、SET NULL、SET DEFAULT、RESTRICT、NO ACTION。 -
DELETE_RULE约束
ON DELETE属性的值。可能的值为CASCADE、SET NULL、SET DEFAULT、RESTRICT、NO ACTION。 -
TABLE_NAME表的名称。此值与
TABLE_CONSTRAINTS表中的相同。 -
REFERENCED_TABLE_NAME约束引用的表的名称。
28.3.26 INFORMATION_SCHEMA RESOURCE_GROUPS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-resource-groups-table.html
RESOURCE_GROUPS 表提供了关于资源组的信息。有关资源组功能的一般讨论,请参见 Section 7.1.16, “Resource Groups”。
您只能查看您拥有某些权限的列的信息。
RESOURCE_GROUPS 表具有以下列:
-
RESOURCE_GROUP_NAME资源组的名称。
-
RESOURCE_GROUP_TYPE资源组类型,可以是
SYSTEM或USER。 -
RESOURCE_GROUP_ENABLED资源组是否启用(1)或禁用(0);
-
VCPU_IDSCPU 亲和性;即资源组可以使用的虚拟 CPU 集合。该值是逗号分隔的 CPU 编号或范围的列表。
-
THREAD_PRIORITY分配给资源组的线程的优先级。优先级范围从 -20(最高优先级)到 19(最低优先级)。系统资源组的优先级范围从 -20 到 0。用户资源组的优先级范围从 0 到 19。
28.3.27 INFORMATION_SCHEMA ROLE_COLUMN_GRANTS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-role-column-grants-table.html
ROLE_COLUMN_GRANTS 表(自 MySQL 8.0.19 起可用)提供了关于当前启用角色可用或授予的列权限的信息。
ROLE_COLUMN_GRANTS 表具有以下列:
-
GRANTOR授予角色的帐户的用户名部分。
-
GRANTOR_HOST授予角色的帐户的主机名部分。
-
GRANTEE授予角色的帐户的用户名部分。
-
GRANTEE_HOST授予角色的帐户的主机名部分。
-
TABLE_CATALOG适用于角色的目录名称。该值始终为
def。 -
TABLE_SCHEMA适用于角色的模式(数据库)名称。
-
TABLE_NAME适用于角色的表名。
-
COLUMN_NAME适用于角色的列名。
-
PRIVILEGE_TYPE授予的权限。该值可以是可以在列级别授予的任何权限;请参阅 Section 15.7.1.6, “GRANT Statement”。每行列出一个权限,因此每个受让人持有的列权限都有一行。
-
IS_GRANTABLEYES或NO,取决于角色是否可授予给其他帐户。
28.3.28 INFORMATION_SCHEMA ROLE_ROUTINE_GRANTS 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-role-routine-grants-table.html
ROLE_ROUTINE_GRANTS 表(自 MySQL 8.0.19 起可用)提供有关当前启用角色可用或授予的角色例程特权的信息。
ROLE_ROUTINE_GRANTS 表具有以下列:
-
GRANTOR授予该角色的帐户的用户名部分。
-
GRANTOR_HOST授予该角色的帐户的主机名部分。
-
GRANTEE授予该角色的帐户的用户名部分。
-
GRANTEE_HOST授予该角色的帐户的主机名部分。
-
SPECIFIC_CATALOG例程所属的目录名称。该值始终为
def。 -
SPECIFIC_SCHEMA例程所属的模式(数据库)的名称。
-
SPECIFIC_NAME例程的名称。
-
ROUTINE_CATALOG例程所属的目录名称。该值始终为
def。 -
ROUTINE_SCHEMA例程所属的模式(数据库)的名称。
-
ROUTINE_NAME例程的名称。
-
PRIVILEGE_TYPE授予的特权。该值可以是在例程级别授予的任何特权;请参阅第 15.7.1.6 节,“GRANT 语句”。每行列出一个特权,因此每个受让人持有的列特权都有一行。
-
IS_GRANTABLEYES或NO,取决于该角色是否可授予其他帐户。
28.3.29 INFORMATION_SCHEMA ROLE_TABLE_GRANTS 表
dev.mysql.com/doc/refman/8.0/en/information-schema-role-table-grants-table.html
ROLE_TABLE_GRANTS 表(自 MySQL 8.0.19 起可用)提供有关当前启用角色可用或授予的角色的表权限的信息。
ROLE_TABLE_GRANTS 表包含以下列:
-
GRANTOR授予角色的帐户的用户名部分。
-
GRANTOR_HOST授予角色的帐户的主机名部分。
-
GRANTEE授予角色的帐户的用户名部分。
-
GRANTEE_HOST授予角色的帐户的主机名部分。
-
TABLE_CATALOG角色适用的目录名称。该值始终为
def。 -
TABLE_SCHEMA角色适用的模式(数据库)的名称。
-
TABLE_NAME角色适用的表的名称。
-
PRIVILEGE_TYPE授予的权限。该值可以是在表级别授予的任何权限;请参阅 Section 15.7.1.6, “GRANT Statement”。每行列出一个权限,因此每个被授予者持有的列权限都有一行。
-
IS_GRANTABLEYES或NO,取决于角色是否可授予其他帐户。
28.3.30 INFORMATION_SCHEMA ROUTINES 表
原文:
dev.mysql.com/doc/refman/8.0/en/information-schema-routines-table.html
ROUTINES 表提供有关存储例程(存储过程和存储函数)的信息。ROUTINES 表不包括内置(本地)函数或可加载函数。
ROUTINES 表包含以下列:
-
SPECIFIC_NAME例程的名称。
-
ROUTINE_CATALOG例程所属的目录名称。该值始终为
def。 -
ROUTINE_SCHEMA例程所属的模式(数据库)的名称。
-
ROUTINE_NAME例程的名称。
-
ROUTINE_TYPE对于存储过程,
PROCEDURE;对于存储函数,FUNCTION。 -
DATA_TYPE如果例程是存储函数,则返回值数据类型。如果例程是存储过程,则该值为空。
DATA_TYPE值仅为类型名称,没有其他信息。DTD_IDENTIFIER值包含类型名称和可能的其他信息,如精度或长度。 -
CHARACTER_MAXIMUM_LENGTH对于存储函数的字符串返回值,最大长度(以字符计)。如果例程是存储过程,则该值为
NULL。 -
CHARACTER_OCTET_LENGTH对于存储函数的字符串返回值,最大长度(以字节计)。如果例程是存储过程,则该值为
NULL。 -
NUMERIC_PRECISION对于存储函数的数值返回值,数值精度。如果例程是存储过程,则该值为
NULL。 -
NUMERIC_SCALE对于存储函数的数值返回值,数值精度。如果例程是存储过程,则该值为
NULL。 -
DATETIME_PRECISION对于存储函数的时间返回值,小数秒精度。如果例程是存储过程,则该值为
NULL。 -
CHARACTER_SET_NAME对于存储函数的字符字符串返回值,字符集名称。如果例程是存储过程,则该值为
NULL。 -
COLLATION_NAME对于存储函数的字符字符串返回值,排序规则名称。如果例程是存储过程,则该值为
NULL。 -
DTD_IDENTIFIER如果例程是存储函数,则返回值数据类型。如果例程是存储过程,则该值为空。
DATA_TYPE值仅为类型名称,没有其他信息。DTD_IDENTIFIER值包含类型名称和可能的其他信息,如精度或长度。 -
ROUTINE_BODY用于例程定义的语言。该值始终为
SQL。 -
ROUTINE_DEFINITION例程执行的 SQL 语句文本。
-
EXTERNAL_NAME该值始终为
NULL。 -
EXTERNAL_LANGUAGE存储例程的语言。该值从
mysql.routines数据字典表的external_language列中读取。 -
PARAMETER_STYLE此值始终为
SQL。 -
IS_DETERMINISTIC根据例程是否定义了
DETERMINISTIC特性,为YES或NO。 -
SQL_DATA_ACCESS例程的数据访问特性。该值为
CONTAINS SQL、NO SQL、READS SQL DATA或MODIFIES SQL DATA之一。 -
SQL_PATH此值始终为
NULL。 -
SECURITY_TYPE例程的
SQL SECURITY特性。该值为DEFINER或INVOKER之一。 -
CREATED创建例程的日期和时间。这是一个
TIMESTAMP值。 -
LAST_ALTERED上次修改例程的日期和时间。这是一个
TIMESTAMP值。如果自创建以来未修改例程,则此值与CREATED值相同。 -
SQL_MODE创建或更改例程时生效的 SQL 模式,以及例程执行时的模式。有关允许的值,请参见第 7.1.11 节,“服务器 SQL 模式”。
-
ROUTINE_COMMENT如果例程有注释,则为注释的文本。如果没有,则此值为空。
-
DEFINERDEFINER子句中命名的帐户(通常是创建例程的用户),格式为'*user_name*'@'*host_name*'。 -
CHARACTER_SET_CLIENT创建例程时的
character_set_client系统变量的会话值。 -
COLLATION_CONNECTION创建例程时的
collation_connection系统变量的会话值。 -
DATABASE_COLLATION与例程关联的数据库的排序规则。
注意事项
-
要查看有关例程的信息,您必须是例程
DEFINER命名的用户,具有SHOW_ROUTINE权限,在全局级别具有SELECT权限,或者在包括例程的范围内被授予CREATE ROUTINE、ALTER ROUTINE或EXECUTE权限。如果您只有CREATE ROUTINE、ALTER ROUTINE或EXECUTE权限,则ROUTINE_DEFINITION列为NULL。 -
存储函数返回值的信息也可以在
PARAMETERS表中找到。存储函数的返回值行可以通过具有ORDINAL_POSITION值为 0 的行来识别。