— 元数据访问方法

1.什么是元数据:数据库是数据的结构化集合,元数据是“有关数据的数据”;

2.MySQL通过以访问元数据的方法:

(1)INFORMATION_SCHEMA:MySQL服务器包含一个被实现为名为INFORMATION_SCHEMA的数据库(模式)的数据字典,其中包含许多显示为表的对象;

(2)SHOW语句:用于获取服务器统计信息,模式和模式对象的相关数据的专用语法;

SHOW DATABASES和SHOW TABLES:返回包含数据库和表名的列表;

SHOW COLUMNS:生成表中列的定义;SHOW COLUMNS FROM table等于DESC table;

需要有SELECT特权才能使用SHOW语句;

(3)DESCRIBE:可用于检查表结构和列属性的SQL语句快捷方式;

(4)mysqlshow:用作指向一些SHOW语句的命令行前端的客户机程序;

— INFORMATION_SCHEMA数据库

— INFORMATION_SCHEMA表;

1.表信息

• COLUMNS:表和视图中的列

• ENGINES:存储引擎

• SCHEMATA:数据库

• TABLES:数据库中的表

• VIEWS:数据库中的视图

2.分区

• PARTITIONS:表分区

• FILES:存储 MySQL NDB 磁盘数据表的文件

3.特权

• COLUMN_PRIVILEGES:MySQL 用户帐户所拥有的列特权

• SCHEMA_PRIVILEGES:MySQL 用户帐户所拥有的数据库特权

• TABLE_PRIVILEGES:MySQL 用户帐户所拥有的表特权

• USER_PRIVILEGES:MySQL 用户帐户所拥有的全局特权

4.字符集支持

• CHARACTER_SETS:可用的字符集

• COLLATIONS:每个字符集的排序

• COLLATION_CHARACTER_SET_APPLICABILITY:适用于特定字符集的排序

5.约束和索引

• KEY_COLUMN_USAGE:关键列的约束

• REFERENTIAL_CONSTRAINTS:外键

• STATISTICS:表索引

• TABLE_CONSTRAINTS:表的约束

6.服务器设置和状态

• KEY_COLUMN_USAGE:约束

• GLOBAL_STATUS:所有 MySQL 连接的状态值

• GLOBAL_VARIABLES:用于新的 MySQL 连接的值

• PLUGINS:服务器插件

• PROCESSLIST:指示哪些线程正在运行

• SESSION_STATUS:当前 MySQL 连接的状态值

• SESSION_VARIABLES:当前 MySQL 连接的生效值

7.例程及相关信息

• EVENTS:预定事件

• ROUTINES:存储过程和功能

• TRIGGERS:数据库中的触发器

• PARAMETERS:存储过程和功能参数以及存储函数

8.InnoDB

• INNODB_CMP 和 INNODB_CMP_RESET:对压缩的 InnoDB 表的相关操作的状态

• INNODB_CMPMEM 和 INNODB_CMPMEM_RESET:InnoDB 缓冲池中压缩页面的状态

• INNODB_LOCKS:InnoDB 事务所请求和持有的每个锁

• INNODB_LOCK_WAITS:每个阻塞的 InnoDB 事务的一个或多个行锁

• INNODB_TRX:当前正在 InnoDB 内部执行的所有事务

• TABLESPACES:活动的表空间

— INFORMATION_SCHEMA表列;

— 对INFORMATION_SCHEMA使用SELECT;

— INFORMATION_SCHEMA示例;

1.显示用于给定数据库中表的存储引擎;

2.查找所有包含SET列的表;

3.显示每个字符集的默认排序规则;

4.显示每个数据库中表的编号;

5.INFORMATION_SCHEMA表是只读的,无法用INSERT/DELETE/UPDATE之类的语句进行修改;如果执行这些类型的语句以尝试更改INFORMATION_SCHEMA表中的数据,服务器将生成错误;

— 使用INFORMATION_SCHEMA表创建Shell命令;

1.本幻灯片中的示例所示,SQL语句将生成一条输出,仅导出world_innodb数据库中那些以单词“Country”开始的的表;

2.输出将生成可以在shell命令行上正确执行的shell脚本;下一步是将此输出存储在一个可

在shell命令行中执行的批处理文件中,这通过添加子句INTO OUTFILE来完成:

SELECT CONCAT(“mysqldump -uroot -pmysql “, TABLE_SCHEMA, ” “, TABLE_NAME, ” >> “,TABLE_SCHEMA, “.sql”)

FROM TABLES WHERE TABLE_NAME LIKE ‘Country%’

INTO OUTFILE ‘\tmp\Country_Dump.sh’

3.然后可以在命令行中执行此文件,命令行将运行本幻灯片中所示的两个mysqldump命令:

shell> \tmp\Country_Dump.sh

shell> \tmp\mysqldump -uroot -pmysql world_innodb Country >> world_innodb.sql

shell> \tmp\mysqldump -uroot -pmysql world_innodb Country_Language >> world_innodb.sql

— 使用INFORMATION_SCHEMA表创建SQL语句;

1.本幻灯片中的示例使用mysql命令执行了一个语句,以制作world_innodb数据库中所有表的精确副本;

(1)–silent命令在输出中删除列标题;

(2)–skip-column-names命令删除输出中的格式(使输出类似于表的格式);

(3)这两个命令用来确保对命令自身的解释是正确的,没有任何干扰执行的外部格式或标题行问题;

2.添加管道符号[|]并随之执行mysql命令会将这些SQL语句发送到MySQL服务器以便执行:

shell> mysql -uroot -pmysql –silent –skip-column-names -e “SELECT CONCAT(‘CREATE TABLE ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘_backup LIKE ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘;’) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘world_innodb’;” | mysql -uroot -pmysql

— MySQL支持的 SHOW 语句;

1.除了INFORMATION_SCHEMA表之外,MySQL还支持SHOW和DESCRIBE语句,作为访问元数据的备选方式;

2.SHOW和DESCRIBE语法不如使用INFORMATION_SCHEMA查询灵活,但是对于大多数用途,SHOW和DESCRIBE语法就足够了;在这些情况下,使用MySQL特定语法通常会更快速,简单;

3.可以通过多种形式使用SHOW语句,如下所示:

SHOW DATABASES:列出可用数据库的名称

SHOW TABLES:列出默认数据库中的表

SHOW TABLES FROM :列出指定数据库中的表

SHOW COLUMNS FROM :显示表的列结构

SHOW INDEX FROM :显示表中有关索引和索引列的信息

SHOW CHARACTER SET:显示可用的字符集及其默认排序

SHOW COLLATION:显示每个字符集的排序

— SHOW语句示例;

mysql> SHOW DATABASES;

mysql> SHOW TABLES;

mysql> SHOW TABLES FROM mysql;

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;

mysql> SHOW COLUMNS FROM CountryLanguage;

mysql> SHOW FULL COLUMNS FROM CountryLanguageG

— 其他SHOW语句示例;

— DESCRIBE语句;

1.DESC table_name等效于SHOW COLUMNS FROM table_name;但是,SHOW COLUMNS支持可选的LIKE和WHERE子句,而DESCRIBE不支持;

2.当指定表名称作为参数时,EXPLAIN等效于DESCRIBE:mysql> EXPLAIN table_name;

— mysqlshow客户机;

1.mysqlshow客户机为各种格式的SHOW语句提供了一个命令行界面,这些语句用于列出数据库的名称,数据库中的表或有关表列或索引的信息;

2.mysqlshow客户机的选项部分可包含任一标准连接参数选项,例如–host或–user;如果默认连接参数不适合,则必须提供选项;mysqlshow也接受特定于其自身运行的选项;

3.使用–help选项调用mysqlshow可查看其选项的完整列表;

4.mysqlshow所执行的操作取决于已提供的非选项参数的数量;

— mysqlshow示例;

1.在没有参数的情况下,mysqlshow将显示类似于SHOW DATABASES的结果;

2.在使用单个参数的情况下,mysqlshow将该参数解释为数据库名称,并针对该数据库显示类似于SHOW TABLES的结果;

3.在有两个参数的情况下,mysqlshow将参数解释为数据库和表名称,并针对该表显示类似于SHOW FULL COLUMNS的结果;

4.在有三个参数的情况下,其输出与两个参数的情况相同,不同之处在于:mysqlshow将第三个参数当做列名称,且仅针对该列显示SHOW FULL COLUMNS输出;

5.如果命令行中最后的参数包含特殊字符,mysqlshow会将该参数解释为模式,且仅显示与该模式匹配的名称;特殊字符包括:%或*(匹配任一字符序列),以及_或?(匹配任一单个字符);本示例中的命令仅显示那些名称始于w的数据库