2012-02-27 83 views
4

我想显示数据库中的整个表的DataDictionary。MySQL显示表的数据字典

SHOW COLUMNS 
FROM `MyDataBase`.`MyTables` 
WHERE IN (SELECT TABLE_NAME 
      FROM information_schema.TABLES 
      WHERE TABLE_SCHEMA = 'MyDataBase' 
); 

我可以使用类似这样的查询吗? 我想用一个单一的查询

回答

3

这是你想要什么,看整列数据:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename'; 
2

MySQL 5.7 Manual

许多章节说明什么SHOW语句相当于一个SELECT检索来自INFORMATION_SCHEMA的信息。对于显示缺省数据库信息的SHOW语句(如果省略FROM db_name子句),通常可以通过将AND TABLE_SCHEMA = SCHEMA()条件添加到从INFORMATION_SCHEMA中检索信息的WHERE子句来选择缺省数据库的信息表。

1
describe table_name; 

检索从INFORMATION_SCHEMA信息,但需要DBA权限。

1

通常情况下,我宁愿将此与多个DESC。我觉得SHOW COLUMNSDESC table_name慢一点。

所以,当相比,如果想获得的所有列在某些数据库

  1. 环通SHOW TABLES FROM DB_NAME
  2. 环通的所有表为DESC table_name

以同样的方式,SHOW INDEXES是慢SHOW CREATE TABLE如果你只是想看到一个表上的索引

4

这里是我用g当我必须填入数据字典时:

SELECT t.table_schema AS db_name, 
     t.table_name, 
     (CASE WHEN t.table_type = 'BASE TABLE' THEN 'table' 
      WHEN t.table_type = 'VIEW' THEN 'view' 
      ELSE t.table_type 
     END) AS table_type, 
     c.column_name, 
     c.column_type, 
     c.column_default, 
     c.column_key, 
     c.is_nullable, 
     c.extra, 
     c.column_comment 
FROM information_schema.tables AS t 
INNER JOIN information_schema.columns AS c 
ON t.table_name = c.table_name 
AND t.table_schema = c.table_schema 
WHERE t.table_type IN ('base table', 'view') 
AND t.table_schema LIKE '%' 
ORDER BY t.table_schema, 
     t.table_name, 
     c.ordinal_position 

这将列出服务器上的所有数据库。您可能希望将where子句更改为仅查看所需的特定表模式。

0

最短的语法是这样的:

SHOW COLUMNS 
FROM `MyDataBase`.`MyTables`; 

Full SHOW Syntax为列:

SHOW [FULL] COLUMNS 
FROM tbl_name [FROM db_name] 
[like_or_where]