深入浅出MySQL阅读笔记-查询元数据信息
日常工作中,会遇到类似下面的应用场景:
- 删除数据库demo下所有前缀为tmp的表;
- 将数据库demo下所有存储引擎为myisam的表改为innodb.
对于这类需求,在MySQL5.0之前只能通过show tables、show create table或者show table status等命令来得到指定数据库下的表名和存储引擎。这些命令不适合进行字符串的批量编辑。
MySQL5.0之后,提供了一个新的数据库information_schema。用来记录MySQL中的元数据信息。元数据指的是数据的数据,比如表名、列名、列类型、索引名等表的各种属性名称。这个库是一个虚拟数据库,物理上并不存在相关的目录和文件;库里show tables 显示的各种“表”也并不是实际存在的物理表,而全部是视图。
对于上面的两个需求,可以通过两个命令得到需要的SQL语句:
select concat( 'drop table demo.' ,table_name, ';' ) from tables where table_name= 'demo' and table_name like 'tmp%' ; select concat( 'alter table demo.' ,table_name, 'engine=innodb;' ) from tables where table_= 'demo' and engine= 'MyISAM' ; |
下面列出一些比较常用的视图:
- SCHEMATA:该表提供当前mysql实例中所有数据库的信息,show databases的结果取之此表。
- TABLES:该表提供了关于数据库中的表的信息(包括视图),详细表述某个表属于哪个schema、表类型、表引擎、创建时间等信息。show tables from schemaname的结果取之此表。
- COLUMNS:该表提供了表中的列信息,详细表述了某张表的所有列以及每个列的信息。show columns from schemaname.tablename的结果取之此表。
- STATISTICS:该表提供了关于表索引的信息。show index from schemaname.tablename的结果取之此表。