《SQL经典实例》五——元数据查询

第五章:元数据查询

5.1、列举模式中的表

1.问题
列出在某个模式里创建的所有表。

select table_name
from information_schema.TABLES

结果:
《SQL经典实例》五——元数据查询_第1张图片

5.2 列举字段

  1. 问题
    你想列举一个表的列(即字段),以及它们的数据类型和在表中的位置。
select column_name,data_type,ordinal_position
from information_schema.columns
where table_name= 'emp'

结果:
《SQL经典实例》五——元数据查询_第2张图片

5.3 列举索引列

  1. 问题
    你想列出某个表的索引,包括构成索引的各列及其位置序号(如果有的话)
show index from emp

结果:
在这里插入图片描述

5.4 列举约束

  1. 问题
    你想列出模式中某个表的约束,以及与这些约束相关的列。例如,你希望找出 EMP 表的约束及相关的列。
 select a.table_name,
 a.constraint_name,
 b.column_name,
 a.constraint_type
 from information_schema.table_constraints a,
 information_schema.key_column_usage b
 where a.table_name = 'EMP'
 and a.table_name = b.table_name
 and a.table_schema = b.table_schema
 and a.constraint_name = b.constraint_name

5.5 列举非索引外键

  1. 问题
    你想列出含有非索引外键的表。例如,你希望确认 EMP 表的外键是否加入了索引。

使用 SHOW INDEX 命令获取诸如索引名称、索引列和列位置序号之类的索引信息。除此之外,我们还可以通过查询 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 列出表的外键。对于MySQL 5 而言,外键虽然默认是加入索引的,但事实上却可以被删掉。要确认外键列的索引是否已经被删除,可以针对特定的表执行 SHOW INDEX 命令,并比较其输出结果与INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME 的·异同。如果 KEY_COLUMN_USAGE 里有对应的 COLUMN_NAME,但是 SHOW INDEX 输出的结果里却没有,那么就说明该列没有索引。

5.6 用SQL生成SQL

  1. 问题
    你想生成动态的 SQL 语句,例如你的目的是将某些维护任务自动化。你希望完成 3 项任
    务:计算各个表的行数,禁用各个表的外键约束,根据表里的数据生成插入脚本。

Oracle:

select 'select count(*) from '||table_name||';'
cnts from user_tables

结果:

CNTS

select count() from ANT;
select count(
) from BONUS;
select count() from DEMO1;
select count(
) from DEMO2;
select count() from DEPT;
select count(
) from DUMMY;
select count() from EMP;
select count(
) from EMP_SALES;
select count() from EMP_SCORE;
select count(
) from PROFESSOR;
select count() from T;
select count(
) from T1;
select count() from T2;
select count(
) from T3;
select count() from TEACH;
select count(
) from TEST;
select count() from TRX_LOG;
select count(
) from X;

你可能感兴趣的:(SQL)