深入浅出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的结果取之此表。
posted on 2017-08-28 20:42  HelonTian  阅读(1100)  评论(0编辑  收藏  举报