本文是前两篇的续篇,其实就是第一篇的升级优化。
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; -- 按照列在表中的位置排序
数据出来了,再结合第二篇直接导出来就可以实现全库导出