Bootstrap

Mysql查询表的结构信息 把列名 数据类型 等变成列数据(适用于生成数据库表结构文档) (三)

本文是前两篇的续篇,其实就是第一篇的升级优化。

Mysql查询表的结构信息 把列名 数据类型 等变成列数据(适用于生成数据库表结构文档) (一)

Mysql查询表的结构信息 把列名 数据类型 等变成列数据(适用于生成数据库表结构文档) (二)

第一篇讲的是 单表的,那么这篇我们来讲全表的 ,因为表太多,不可能一个一个的去写对吧,当然也可以用代码去循环,总之没有直接sql 快。

话不多说,开整!

1. 查询所有表及对应的字段

SET @row_number = 0;

SELECT   
    (@row_number:=@row_number + 1) AS 序号,  
    t.TABLE_NAME AS 表名,
    t.TABLE_COMMENT AS 表备注,
    c.COLUMN_NAME AS 列名,   
    c.COLUMN_TYPE AS 数据类型,
    c.COLUMN_COMMENT AS 说明,  
    CASE c.IS_NULLABLE 
        WHEN 'NO' THEN '否'
        ELSE '是'
    END AS 是否允许为空
FROM   
    INFORMATION_SCHEMA.COLUMNS c
JOIN 
    INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE   
    c.TABLE_SCHEMA = 'xxxxxxxxxx' -- 替换为你的数据库名  
    AND t.TABLE_TYPE = 'BASE TABLE' -- 选择基本表  固定类型 ,看具体需求 
ORDER BY   
    c.TABLE_NAME, c.ORDINAL_POSITION; -- 按照列在表中的位置排序

如果想要按表名分组,列信息放在一个单元格内也行:

SET @row_number = 0;

SELECT 
    t.TABLE_NAME AS 表名,
    t.TABLE_COMMENT AS 表备注,
    GROUP_CONCAT(
        CONCAT(
            c.COLUMN_NAME, ' (', c.COLUMN_TYPE, ') - ', 
            CASE c.IS_NULLABLE 
                WHEN 'NO' THEN '否'
                ELSE '是'
            END, 
            ' : ', c.COLUMN_COMMENT
        ) SEPARATOR '\n'
    ) AS 列信息
FROM 
    INFORMATION_SCHEMA.COLUMNS c
JOIN 
    INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE 
    c.TABLE_SCHEMA = 'xxxxxx' -- 替换为你的数据库名
    AND t.TABLE_TYPE = 'BASE TABLE' -- 选择基本表
GROUP BY 
    t.TABLE_NAME, t.TABLE_COMMENT
ORDER BY 
    t.TABLE_NAME;

当然也可以加数据库名称

SET @row_number = 0;

SELECT   
    (@row_number:=@row_number + 1) AS 序号,  
    c.TABLE_SCHEMA AS 数据库名称,  -- 添加数据库名称
    t.TABLE_NAME AS 表名,
    t.TABLE_COMMENT AS 表备注,
    c.COLUMN_NAME AS 列名,   
    c.COLUMN_TYPE AS 数据类型,
    c.COLUMN_COMMENT AS 说明,  
    CASE c.IS_NULLABLE 
        WHEN 'NO' THEN '否'
        ELSE '是'
    END AS 是否允许为空
FROM   
    INFORMATION_SCHEMA.COLUMNS c
JOIN 
    INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
-- WHERE c.TABLE_SCHEMA = 'xxxxxx' -- 替换为你的数据库名
ORDER BY   
    c.TABLE_NAME, c.ORDINAL_POSITION; -- 按照列在表中的位置排序
    

数据出来了,再结合第二篇直接导出来就可以实现全库导出

;