MySQL显示表的Datadictionary

时间:2012-02-27 08:13:48

标签: mysql

我想为数据库中的整个表显示DataDictionary。

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

我可以使用这样的查询吗? 我希望使用单个查询来查看整个列数据

6 个答案:

答案 0 :(得分:7)

以下是我必须使用以生成数据字典的内容:

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子句更改为仅查看所需的特定表架构。

答案 1 :(得分:4)

这就是你想要的:

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

答案 2 :(得分:2)

来自MySQL 5.7 Manual

  

许多部分表明SHOW语句等同于从INFORMATION_SCHEMA中检索信息的SELECT。对于显示缺省数据库信息的SHOW语句,如果省略FROM db_name子句,通常可以通过向查询的WHERE子句添加AND TABLE_SCHEMA = SCHEMA()条件来选择缺省数据库的信息,该查询从INFORMATION_SCHEMA检索信息。表

答案 3 :(得分:1)

describe table_name;

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

答案 4 :(得分:1)

通常我更喜欢使用多个DESC。我觉得SHOW COLUMNSDESC table_name慢一点。

因此,如果想要获取某些数据库中的所有列

  1. 循环通过SHOW TABLES FROM DB_NAME
  2. 将所有表格循环为DESC table_name
  3. 同样地,SHOW INDEXESSHOW CREATE TABLE相比,如果您只想查看表格上的索引,则{{1}}会更慢

答案 5 :(得分:0)

最短的语法是:

SHOW COLUMNS 
FROM `MyDataBase`.`MyTables`;
列的

Full SHOW Syntax

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