我们在安装或使用mysql数据库时,mysql会默认给我们创建information_schema数据库。实际上,information_schema只是视图,存储的是元数据,而不是基本表,因此,你将无法看到与之相关的任何文件。
什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.19-log MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
我们切换到information_schema数据库后,可以通过show tables指令查询information_schema数据库
-- 切换到information_schema数据库
mysql> use information_schema
Database changed
-- 展示information_schema数据库中数据表
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLUMNS |
| TABLES |
| TABLESPACES |
......
......
| INNODB_SYS_TABLESTATS |
| INNODB_SYS_TABLESTATS |
+---------------------------------------+
-- 查询information_schema中一共有61张表
mysql> SELECT count(1) TABLES FROM information_schema.TABLES WHERE table_schema = 'information_schema' ;
+--------+
| TABLES |
+--------+
| 61 |
+--------+
1 row in set (0.00 sec)
information_schema数据库存在61张表,但我们常用的也就是以下十几张表
提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。show tables from schemaname的结果取之此表。
查询test库下的数据表信息
mysql> SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA = 'test'ORDER BY TABLE_NAME;
+---------------+--------------+------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| def | test | class | BASE TABLE | InnoDB | 10 | Dynamic | 2 | 8192 | 16384 | 0 | 0 | 0 | 3 | 2022-06-21 17:31:00 | NULL | NULL | utf8_general_ci | NULL | | |
| def | test | students | BASE TABLE | InnoDB | 10 | Dynamic | 2 | 8192 | 16384 | 0 | 16384 | 0 | 3 | 2022-06-21 17:31:00 | NULL | NULL | utf8_general_ci | NULL | | |
+---------------+--------------+------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
2 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| Table_catalog | 数据表登记目录 |
| Table_schema | 数据表所属的数据库名 |
| Table_name | 表名称 |
| Table_type | 表类型[system view |
| Engine | 使用的数据库引擎[MyISAM |
| Version | 版本,默认值10 |
| Row_format | 行格式[Compact |
| Table_rows | 表里所存多少行数据 |
| Avg_row_length | 平均行长度 |
| Data_length | 数据长度 |
| Max_data_length | 最大数据长度 |
| Index_length | 索引长度 |
| Data_free | 空间碎片 |
| Auto_increment | 做自增主键的自动增量当前值 |
| Create_time | 表的创建时间 |
| Update_time | 表的更新时间 |
| Check_time | 表的检查时间 |
| Table_collation | 表的字符校验编码集 |
| Checksum | 校验和 |
| Create_options | 创建选项 |
| Table_comment | 表的注释、备注 |
提供了当前mysql实例中所有数据库的信息,show databases的结果取之此表。
mysql> SELECT * FROM SCHEMATA;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def | information_schema | utf8 | utf8_general_ci | NULL |
| def | antd-access | utf8 | utf8_general_ci | NULL |
| def | mysql | utf8 | utf8_general_ci | NULL |
| def | performance_schema | utf8 | utf8_general_ci | NULL |
| def | sakila | utf8 | utf8_general_ci | NULL |
| def | sys | utf8 | utf8_general_ci | NULL |
| def | test | utf8 | utf8_general_ci | NULL |
| def | world | utf8 | utf8_general_ci | NULL |
+--------------+--------------------+----------------------------+------------------------+----------+
8 rows in set (0.00 sec)
-- 查询多少个数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| antd-access |
| mysql |
| performance_schema |
| sakila |
| sys |
| test |
| world |
+--------------------+
8 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| schema_name | 数据库名称 |
| default_character_set_name | 数据库编码 |
| default_collation_name | 数据库排序规则 |
提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。show columns from schemaname.tablename的结果取之此表。
比如查询students表中的字段信息
mysql> select * from information_schema.COLUMNS where table_name = 'students';
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+------------------+------------+----------------+---------------------------------+----------------+-----------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | COLUMN_COMMENT | GENERATION_EXPRESSION |
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+------------------+------------+----------------+---------------------------------+----------------+-----------------------+
| def | test | students | id | 1 | NULL | NO | int | NULL | NULL | 10 | 0 | NULL | NULL | NULL | int(10) unsigned | PRI | auto_increment | select,insert,update,references | | |
| def | test | students | name | 2 | NULL | YES | varchar | 255 | 765 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(255) | | | select,insert,update,references | | |
| def | test | students | classId | 3 | NULL | YES | int | NULL | NULL | 10 | 0 | NULL | NULL | NULL | int(11) | MUL | | select,insert,update,references | | |
| def | test | students | no | 4 | NULL | YES | varchar | 50 | 150 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(50) | | | select,insert,update,references | | |
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+------------------+------------+----------------+---------------------------------+----------------+-----------------------+
4 rows in set (0.00 sec)
| 列名 | 数据类型 | 描述 |
|---|---|---|
| TABLE_CATALOG | nvarchar(128) | 表限定符。 |
| TABLE_SCHEMA | nvarchar(128) | 表所有者。 |
| TABLE_NAME | nvarchar(128) | 表名。 |
| COLUMN_NAME | nvarchar(128) | 列名。 |
| ORDINAL_POSITION | smallint | 列标识号。 |
| COLUMN_DEFAULT | nvarchar(4000) | 列的默认值。 |
| IS_NULLABLE | varchar(3) | 列的为空性。如果列允许 NULL,那么该列返回 YES。否则,返回 NO。 |
| DATA_TYPE | nvarchar(128) | 系统提供的数据类型。 |
| CHARACTER_MAXIMUM_LENGTH | smallint | 以字符为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 NULL。有关更多信息,请参见数据类型。 |
| CHARACTER_OCTET_LENGTH | smallint | 以字节为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 NULL。 |
| NUMERIC_PRECISION | tinyint | 近似数字数据、精确数字数据、整型数据或货币数据的精度。否则,返回 NULL。 |
| NUMERIC_PRECISION_RADIX | smallint | 近似数字数据、精确数字数据、整型数据或货币数据的精度基数。否则,返回 NULL。 |
| NUMERIC_SCALE | tinyint | 近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则,返回 NULL。 |
| DATETIME_PRECISION | smallint | datetime 及 SQL-92 interval 数据类型的子类型代码。对于其它数据类型,返回 NULL。 |
| CHARACTER_SET_CATALOG | varchar(6) | 如果列是字符数据或 text 数据类型,那么返回 master,指明字符集所在的数据库。否则,返回 NULL。 |
| CHARACTER_SET_SCHEMA | varchar(3) | 如果列是字符数据或 text 数据类型,那么返回 DBO,指明字符集的所有者名称。否则,返回 NULL。 |
| CHARACTER_SET_NAME | nvarchar(128) | 如果该列是字符数据或 text 数据类型,那么为字符集返回唯一的名称。否则,返回 NULL。 |
| COLLATION_CATALOG | varchar(6) | 如果列是字符数据或 text 数据类型,那么返回 master,指明在其中定义排序次序的数据库。否则此列为 NULL。 |
| COLLATION_SCHEMA | varchar(3) | 返回 DBO,为字符数据或 text 数据类型指明排序次序的所有者。否则,返回 NULL。 |
| COLLATION_NAME | nvarchar(128) | 如果列是字符数据或 text 数据类型,那么为排序次序返回唯一的名称。否则,返回 NULL。 |
| DOMAIN_CATALOG | nvarchar(128) | 如果列是一种用户定义数据类型,那么该列是某个数据库名称,在该数据库名中创建了这种用户定义数据类型。否则,返回 NULL。 |
| DOMAIN_SCHEMA | nvarchar(128) | 如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的创建者。否则,返回 NULL。 |
| DOMAIN_NAME | nvarchar(128) | 如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的名称。否则,返回 NULL。 |
描述了具有约束的键列。
比如查询student表中约束关系。
mysql> SELECT * from information_schema.key_column_usage where table_name = 'students' ;
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| CONSTRAINT_CATALOG | 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 |
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| def | test | PRIMARY | def | test | students | id | 1 | NULL | NULL | NULL | NULL |
| def | test | fk_classId | def | test | students | classId | 1 | 1 | test | class | id |
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
2 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| 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 | 被引用的列的名称 |
这是字符集表,提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
select * from information_schema.CHARACTER_SETS ;
+--------------------+----------------------+---------------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION | MAXLEN |
+--------------------+----------------------+---------------------------------+--------+
| big5 | big5_chinese_ci | Big5 Traditional Chinese | 2 |
| dec8 | dec8_swedish_ci | DEC West European | 1 |
| cp850 | cp850_general_ci | DOS West European | 1 |
| hp8 | hp8_english_ci | HP West European | 1 |
......
......
| eucjpms | eucjpms_japanese_ci | UJIS for Windows Japanese | 3 |
| gb18030 | gb18030_chinese_ci | China National Standard GB18030 | 4 |
+--------------------+----------------------+---------------------------------+--------+
41 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| character_set_name | 字符集名 |
| default_collate_name | 默认排序规则 |
| description | 描述信息 |
| maxlen | 单个字符最大占用字节数 |
提供了关于表索引的信息。show index from schemaname.tablename的结果取之此表。
比如,查询students标的索引信息
mysql> SELECT * from information_schema.statistics where table_name = 'students' ;
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | NON_UNIQUE | INDEX_SCHEMA | INDEX_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULLABLE | INDEX_TYPE | COMMENT | INDEX_COMMENT |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+
| def | test | students | 0 | test | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| def | test | students | 1 | test | fk_classId | 1 | classId | A | 1 | NULL | NULL | YES | BTREE | | |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+
2 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| TABLE_CATALOG | 包含索引的表所属的目录的名称。 该值始终为def |
| TABLE_SCHEMA | 包含索引的表所属的结构(数据库)的名称 |
| TABLE_NAME | 包含索引的表的名称 |
| NON_UNIQUE | 如果索引不能重复,则为0;如果可以,则为1 |
| INDEX_SCHEMA | 索引所属的结构(数据库)的名称 |
| INDEX_NAME | 索引的名称。 如果是主键,则始终为PRIMARY |
| SEQ_IN_INDEX | 索引中的列序列号,以1开头 |
| COLUMN_NAME | 列名称 |
| COLLATION | 列在索引中排序方式:A(升序),D(降序),NULL(未排序) |
| CARDINALITY | 估计索引中唯一值的数量,该值不一定精确 |
| SUB_PART | 索引前缀。 如果列仅被部分索引,则索引字符的数量,如果整列被索引,则为NULL |
| PACKED | 指示密钥的打包方式。 如果不是,则为NULL |
| NULLABLE | 如果列可能包含NULL值,则包含YES,否则包含’’ |
| INDEX_TYPE | 索引类型(BTREE,FULLTEXT,HASH,RTREE) |
| COMMENT | 有关未在其自己的列中描述的索引的信息,例如在禁用索引时禁用 |
| INDEX_COMMENT | 索引注释 |
这是用户权限表,给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
mysql> select * from information_schema.USER_PRIVILEGES ;
+-----------------------------+---------------+-------------------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+-----------------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def | SELECT | YES |
| 'root'@'localhost' | def | INSERT | YES |
| 'root'@'localhost' | def | UPDATE | YES |
......
......
| 'mysql.session'@'localhost' | def | SUPER | NO |
| 'mysql.sys'@'localhost' | def | USAGE | NO |
+-----------------------------+---------------+-------------------------+--------------+
30 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| GRANTEE | 权限描述 |
| TABLE_CATALOG | def |
| PRIVILEGE_TYPE | 权限类型 |
| IS_GRANTABLE | 是否授权 |
这是方案权限表,给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
mysql> select * from information_schema.SCHEMA_PRIVILEGES;
+-----------------------------+---------------+--------------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | PRIVILEGE_TYPE | IS_GRANTABLE |
+-----------------------------+---------------+--------------------+----------------+--------------+
| 'mysql.sys'@'localhost' | def | sys | TRIGGER | NO |
| 'mysql.session'@'localhost' | def | performance_schema | SELECT | NO |
+-----------------------------+---------------+--------------------+----------------+--------------+
2 rows in set (0.00 sec)
| 字段 | 类型 | NULL | 含义 |
|---|---|---|---|
| GRANTEE | varchar(81) | NO | 权限描述 |
| TABLE_CATALOG | varchar(4096) | NO | def |
| TABLE_SCHEMA | varchar(128) | NO | 数据库名 |
| TABLE_NAME | varchar(64) | NO | 表名 |
| PRIVILEGE_TYPE | varchar(64) | NO | 权限类型 |
| IS_GRANTABLE | varchar(3) | NO | 是否授权 |
这是表权限表,给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
mysql> select * from information_schema.TABLE_PRIVILEGES;
+-----------------------------+---------------+--------------+------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+-----------------------------+---------------+--------------+------------+----------------+--------------+
| 'mysql.session'@'localhost' | def | mysql | user | SELECT | NO |
| 'mysql.sys'@'localhost' | def | sys | sys_config | SELECT | NO |
+-----------------------------+---------------+--------------+------------+----------------+--------------+
2 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| 字段名称 | 描述 |
| GRANTEE | 权限描述 |
| TABLE_CATALOG | def |
| TABLE_SCHEMA | 数据库名 |
| TABLE_NAME | 表名 |
| PRIVILEGE_TYPE | 权限类型 |
| IS_GRANTABLE | 是否授权 |
这是列权限表,给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
mysql> select * from COLUMN_PRIVILEGES;
+----------+---------------+--------------+------------+-------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------+---------------+--------------+------------+-------------+----------------+--------------+
| 'xx'@'%' | def | sbtest | sbtest1 | id | SELECT | NO |
| 'xx'@'%' | def | sbtest | sbtest1 | id | INSERT | NO |
| 'xx'@'%' | def | sbtest | sbtest1 | id | UPDATE | NO |
+----------+---------------+--------------+------------+-------------+----------------+--------------+
3 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| GRANTEE | PRIVILEGE_TYPE 列值的权限对应的授予者(账户名) |
| TABLE_SCHEMA | PRIVILEGE_TYPE 列值的权限关联的表对应的库名 |
| TABLE_NAME | PRIVILEGE_TYPE 列值的权限关联的表名 |
| COLUMN_NAME | PRIVILEGE_TYPE 列值的权限关联的字段名 |
| PRIVILEGE_TYPE | 具体的列权限名称,注意:该字段值只显示一个权限名称,即,如果一个字段拥有多个可授予的列权限值,则在该表中会记录多行记录,每行PRIVILEGE_TYPE列值仅对应一个权限名称 |
| IS_GRANTABLE | 如果GRANTEE列值表示的授予者还同时拥有grant option权限,则该列值为YES,否则为NO |
提供了关于各字符集的对照信息。
mysql> select * from information_schema.COLLATIONS;
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------------+--------------------+-----+------------+-------------+---------+
| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 |
| big5_bin | big5 | 84 | | Yes | 1 |
| dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 |
......
......
| gb18030_bin | gb18030 | 249 | | Yes | 1 |
| gb18030_unicode_520_ci | gb18030 | 250 | | Yes | 8 |
+--------------------------+--------------------+-----+------------+-------------+---------+
222 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| COLLATION_NAME | 比对方法名称 |
| CHARACTER_SET_NAME | 和collation关联的字符集名称 |
| ID | collation的ID |
| IS_DEFAULT | collation是否是对应字符集的默认比对方法 |
| IS_COMPILED | 字符集是否被编译到服务器中 |
| SORTLEN | 排序字符集需要用到的内存大小 |
指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
mysql> select * from information_schema. COLLATION_CHARACTER_SET_APPLICABILITY;
+--------------------------+--------------------+
| COLLATION_NAME | CHARACTER_SET_NAME |
+--------------------------+--------------------+
| big5_chinese_ci | big5 |
| big5_bin | big5 |
| dec8_swedish_ci | dec8 |
| dec8_bin | dec8 |
......
......
| gb18030_bin | gb18030 |
| gb18030_unicode_520_ci | gb18030 |
+--------------------------+--------------------+
222 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| COLLATION_NAME | 比对方法名称 |
| CHARACTER_SET_NAME | 字符集名称 |
描述了存在约束的表。以及表的约束类型。
比如查询students表存在的约束表。
mysql> select * from information_schema. TABLE_CONSTRAINTS where table_schema = 'test' and table_name = 'students';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| def | test | PRIMARY | test | students | PRIMARY KEY |
| def | test | fk_classId | test | students | FOREIGN KEY |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
2 rows in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| CONSTRAINT_CATALOG | def |
| CONSTRAINT_SCHEMA | 数据库名 |
| CONSTRAINT_NAME | 约束名称 |
| TABLE_SCHEMA | 数据库名 |
| TABLE_NAME | 表名 |
| CONSTRAINT_TYPE | 约束类型 |
提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为mysql.proc name的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
mysql> select * from information_schema.ROUTINES limit 1 \G;
*************************** 1. row ***************************
SPECIFIC_NAME: film_in_stock
ROUTINE_CATALOG: def
ROUTINE_SCHEMA: sakila
ROUTINE_NAME: film_in_stock
ROUTINE_TYPE: PROCEDURE
DATA_TYPE:
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: NULL
ROUTINE_BODY: SQL
ROUTINE_DEFINITION: BEGIN
SELECT inventory_id
FROM inventory
WHERE film_id = p_film_id
AND store_id = p_store_id
AND inventory_in_stock(inventory_id);
SELECT FOUND_ROWS() INTO p_film_count;
END
EXTERNAL_NAME: NULL
EXTERNAL_LANGUAGE: NULL
PARAMETER_STYLE: SQL
IS_DETERMINISTIC: NO
SQL_DATA_ACCESS: READS SQL DATA
SQL_PATH: NULL
SECURITY_TYPE: DEFINER
CREATED: 2021-11-26 16:29:50
LAST_ALTERED: 2021-11-26 16:29:50
SQL_MODE: STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ROUTINE_COMMENT:
DEFINER: root@localhost
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| 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 | 如果例程是存储的函数,则返回值数据类型。如果例程是存储过程,则此值为空。 |
| ROUTINE_BODY | 例程定义所使用的语言。此值始终为SQL。 |
| ROUTINE_DEFINITION | 例程执行的SQL语句的文本。 |
| EXTERNAL_NAME | 此值始终为NULL。 |
| EXTERNAL_LANGUAGE | 存储例程的语言。该值是从数据字典表的external_language列中 读取的 mysql.routines。 |
| PARAMETER_STYLE | 此值始终为SQL。 |
| IS_DETERMINISTIC | YES或NO,取决于例程是否使用DETERMINISTIC特性定义 。 |
| 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模式,在该模式下执行例程。 |
| ROUTINE_COMMENT | 注释文本(如果例程包含一个)。如果不是,则此值为空。 |
| DEFINER | 在DEFINER子句中命名的帐户(通常是创建例程的用户), 格式。 ‘user_name’@‘host_name’ |
| CHARACTER_SET_CLIENT | character_set_client创建例程时系统变量 的会话值 。 |
| COLLATION_CONNECTION | collation_connection创建例程时系统变量 的会话值 。 |
| DATABASE_COLLATION | 与例程相关联的数据库的整理。 |
给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
数据库切换到test下,并创建名为test_view视图
-- 切换数据库到test
mysql> use test
Database changed
-- 创建test-view视图
mysql> CREATE VIEW test_view AS SELECT`students`.`name` AS `姓名`,`students`.`no` AS `学号`,`class`.`name` AS `班名` FROM`students`LEFT JOIN `class` ON `class`.`id` = `students`.`classId`;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from information_schema.VIEWS where table_name = 'test_view';
+---------------+--------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | DEFINER | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION |
+---------------+--------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| def | test | test_view | select `test`.`students`.`name` AS `姓名`,`test`.`students`.`no` AS `学号`,`test`.`class`.`name` AS `班名` from (`test`.`students` left join `test`.`class` on((`test`.`class`.`id` = `test`.`students`.`classId`))) | NONE | YES | root@localhost | DEFINER | gbk | gbk_chinese_ci |
+---------------+--------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
1 row in set (0.00 sec)
| 字段 | 含义 |
|---|---|
| TABLE_CATALOG | def |
| TABLE_SCHEMA | 数据库名称 |
| TABLE_NAME | 表名称 |
| VIEW_DEFINITION | 视图定义 |
| CHECK_OPTION | 检查选项 |
| IS_UPDATABLE | 是否可更新 |
| DEFINER | 创建视图的用户名 |
| SECURITY_TYPE | 安全类型 |
| CHARACTER_SET_CLIENT | 视图创建时对应的seesion变量character_set_client的值 |
| COLLATION_CONNECTION | 视图创建时对应的seesion变量collation_connection的值 |
SQL触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,即会执行或触发SQL触发器,例如插入,更新或删除。。必须有super权限才能查看该表。
mysql> select * from information_schema.TRIGGERS limit 1 \G;
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: sakila
TRIGGER_NAME: customer_create_date
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: sakila
EVENT_OBJECT_TABLE: customer
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: SET NEW.create_date = NOW()
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: 2021-11-26 16:29:50.66
SQL_MODE: STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.01 sec)
| 字段 | 含义 |
|---|---|
| trigger_schema | 触发器所属schema(database)的名称 |
| trigger_name | 触发器名称 |
| event_manipulation | 触发事件。这是触发触发器的关联表上的操作类型。值为 ‘INSERT’ (插入行), ‘DELETE’ (删除行)或 ‘UPDATE’ (修改行) |
| event_object_catalog | 如“使用触发器”中所述,每个触发器只与一个表相关联。 该列表示此表所在的目录。 |
| event_object_schema | 如“使用触发器”中所述,每个触发器只与一个表相关联。 该列表示此表所在schema(数据库) |
| event_object_table | 如“使用触发器”中所述,每个触发器只与一个表相关联。 该列表示此表所在的表名 |
| action_statement | 触发的语句 |
| action_timing | 触发器时机。值为 ‘BEFORE’ 或 ‘AFTER’ |
| definer definer | 创建触发器的用户的帐户, 格式。‘user_name’@‘host_name’ |
我们在开发过程中,可以通过查询information_schema中的数据表【视图】,可以查看我们创建的表信息、字段信息、视图信息等等。