一对一直播交友app开发,百度网站优化公司,有哪些免费做外贸的网站,推广怎么做转自#xff1a; https://www.cnblogs.com/postnull/p/6697077.html 平时使用MySQL客户端操作数据库的同学#xff0c;只要稍微留神都会发现#xff0c;除了我们建的库之外#xff0c;还经常看到三个数据库的影子#xff1a;
1. information_schema
2. performance_sche…转自 https://www.cnblogs.com/postnull/p/6697077.html 平时使用MySQL客户端操作数据库的同学只要稍微留神都会发现除了我们建的库之外还经常看到三个数据库的影子
1. information_schema
2. performance_schema
3. mysql这三个数据库究竟是什么东西呢今天我们好好认识一下MySQL三个火枪手中的information_schema。
一、数据库实例和数据库
在认识information_schema前我们先了解下数据库实例和数据库的区别和联系。我们本地启动MySQL服务就是启动了一个数据库实例他首先是一个进程管理了一系列的数据库文件。而我们执行create database cmcc_web 这条SQL语句时才是真正创建一个数据库他是一堆表的集合其实也是文件的集合。简而言之数据库实例就是RDBMS数据库管理系统数据库就是DatabaseDatabase是存放数据的仓库RDBMS就是管理仓库的系统。 在MySQL中每个schema就是对应一个数据库。这个词将会在下面的篇幅频繁出现。
二、数据库元数据
元(meta)一般被我们翻译成“关于……的……”。元数据(meta data)——“data about data” 关于数据的数据一般是结构化数据如存储在数据库里的数据规定了字段的长度、类型等。这段话来源于知乎。 所以metadata就是描述数据的数据在MySQL中就是描述database的数据。有哪些数据库、每个表有哪些表、表有多少字段、字段是什么类型等等这样的数据就是数据库的元数据。
官方定义 INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges 综上我们可以称information_schema是一个元数据库。它就像物业公司的信息库对管理的每栋大厦有多少电梯、电梯型号、每个房间的长宽高等等了如指掌。
三、常见的表
1、SCHEMATA 提供数据库信息有哪些数据库字符集是GBK还是UTF-8等等。常用字段 字段名含义备注SCHEMA_NAME数据库名DEFAULT_CHARACTER_SET_NAME字符集DEFAULT_COLLATION_NAME排序规则等同命令SHOW DATABASES
2、TABLES 提供表的信息数据库有哪些表是什么存储引擎等等。常用字段 字段名含义备注SCHEMA_NAME数据库名TABLE_NAME表名TABLE_TYPE表的类型类型有BASE TABLE、VIEW、SYSTEM VIEWENGINE存储引擎CREATE_TIME建表时间等同命令SHOW TABLES
3、COLUMNS 提供字段的信息有哪些字段字段类型是什么等等。常用字段 字段名含义备注SCHEMA_NAME数据库名TABLE_NAME表名COLUMN_NAME字段名COLUMN_TYPE字段类型如int(10),varchar(250)等同命令SHOW COLUMNS 或者 desc tctest.emp 看emp表的具体字段。
4、STATISTICS 这张表的单词是统计的意思但是却是索引的信息真奇怪。常用字段 字段名含义备注SCHEMA_NAME数据库名TABLE_NAME表名INDEX_SCHEMA也是数据库名INDEX_NAME索引名COLUMN_NAME字段名INDEX_TYPE索引类型一般是BTREE等同命令SHOW INDEX
5、TABLE_CONSTRAINTS 提供约束情况我们想看看表有哪些约束约束指的是唯一性约束、主键约束、外键约束。常用字段 字段名含义备注CONSTRAINT_SCHEMA数据库名CONSTRAINT_NAME约束名TABLE_SCHEMA也是数据库名TABLE_NAME表名CONSTRAINT_TYPE约束类型UNIQUE、PRIMARY KEY、FOREIGN KEY唯一约束和主键约束我们在前面的索引中一样可以查到。
6、KEY_COLUMN_USAGE 有STATISTICS和TABLE_CONSTRAINTS表为什么还需要KEY_COLUMN_USAGE 因为外键时没有指出参考的是哪张表的哪个字段常用字段 字段名含义备注CONSTRAINT_SCHEMA数据库名CONSTRAINT_NAME约束名PRIMARY或列名或外键名TABLE_SCHEMA也是数据库名TABLE_NAME表名COLUMN_NAME列名REFERENCED_TABLE_SCHEMA参考的数据库REFERENCED_TABLE_NAME参考的表REFERENCED_COLUMN_NAME参考的列相比前面两个KEY_COLUMN_USAGE这个表的信息是最全的。包括主键、外键、唯一约束。
7、ROUTINES routines是程序的意思在MySQL当然指的是函数和存储过程 字段名含义备注SPECIFIC_NAME程序名ROUTINE_SCHEMA数据库名ROUTINE_NAME程序名ROUTINE_TYPE程序类型PROCEDURE或FUNCTIONROUTINE_BODY函数体好像都是SQLROUTINE_DEFINITION具体的程序语句并没有show ROUTINES语句。
8、VIEWS 查询数据库下所有的视图 字段名含义备注TABLE_SCHEMA数据库名TABLE_NAME表名VIEW_DEFINITION视图定义语句9、TRIGGERS 查询所有的触发器 字段名含义备注TRIGGER_SCHEMA数据库名TRIGGER_NAME触发器名EVENT_OBJECT_SCHEMA触发的数据库EVENT_OBJECT_TABLE触发的表ACTION_STATEMENT触发的语句ACTION_TIMING触发时机BEFORE或AFTER等同命令show triggers from tctest
10、其他表ENGINES列举了当前数据库对InnoDB、MEMORY、MyISAM等各种存储引擎的支持情况。等同show ENGINESGLOBAL_VARIABLES服务器变量设置一些开关和设置。等同命令show global variables。除了global还有session。PLUGINSMySQL的插件列表。可以看到存储引擎InnoDB甚至binlog都是插件binlog是强制加载的InnoDB是默认打开的。等同命令show PLUGINSPROCESSLIST查看正在运行的线程比如我查这个表就看到一个查询的线程。等同命令show full processlist
四、是表还是视图
文档说information_schema下的表不是基本表而是视图。但是在VIEWS中查不到在TABLES中能查到这些表表类型是SYSTEM VIEW。存储引擎使用的是MEMORY或MyISAM。 使用show命令
show create table information_schema.TABLES;可以看到创建的是临时表存储引擎是MEMORY
CREATE TEMPORARY TABLE TABLES(
)ENGINEMEMORY五、show命令还是select语句
show命令更简便有时也能达到相同目的。但是输出格式已固定select表的结果更完善符合SQL标准。
六、Oracle中有information_schema吗
没有实践过但是平时使用Oracle时没有见到过这个库。官方的FAQ给出了结果 F:What is the difference between the Oracle Data Dictionary and MySQL INFORMATION_SCHEMA? A:Both Oracle and MySQL provide metadata in tables. However, Oracle and MySQL use different table names and column names. The MySQL implementation is more similar to those found in DB2 and SQL Server, which also support INFORMATION_SCHEMA as defined in the SQL standard.
大意是DB2和SQL Server都支持information_schemaOracle有元数据表但是列名和表名不一样。