博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

mysql提取建表语句_获取MySQL中某个数据库下所有表建表语句的DDL

本脚本可以获取MySQL中某个数据库下所有表建表语句的DDL

注意:本脚本需在MySQL8.0以上版本运行

注意:本脚本不获取VIEW创建语句

注意:本脚本没有处理主键,外键等约束

注意:本脚本只处理非分区表,分区表请自己改写脚本

注意:如果你做数据迁移,想把MySQL数据库迁移到其他数据库,自己改写脚本

WITH tab AS

(SELECT table_name FROM information_schema.TABLES WHERE table_schema = '数据库名' and table_type='BASE TABLE')

SELECT CASE

WHEN id = -1 THEN

concat('create table ', table_name)

WHEN id = 0 THEN

'('

WHEN id = 1 AND max_id = 1 THEN

concat(' ', column_name, ' ', column_type)

WHEN id = 1 AND max_id <> 1 THEN

concat(' ', column_name, ' ', column_type, ',')

WHEN id >= 1 AND id < max_id THEN

concat(' ', column_name, ' ', column_type, ',')

WHEN id = max_id THEN

concat(' ', column_name, ' ', column_type)

WHEN id = 999 THEN

');'

END create_table_ddl

FROM (SELECT table_name,

ordinal_position id,

max(ordinal_position) over(PARTITION BY table_schema, table_name) max_id,

column_name,

concat(column_type,

CASE

WHEN is_nullable = 'NO' THEN

' not null'

ELSE

''

END,

CASE

WHEN COLUMN_DEFAULT IS NULL THEN

''

WHEN COLUMN_DEFAULT IS NOT NULL AND

data_type IN ('varchar', 'char') THEN

concat(' default ', '''', column_default, '''')

WHEN COLUMN_DEFAULT IS NOT NULL AND

data_type NOT IN ('varchar', 'char') THEN

concat(' default ', column_default)

END,

'',

REPLACE(REPLACE(extra, 'DEFAULT_GENERATED', ''),

'auto_increment',

'')) column_type

FROM information_schema.COLUMNS

WHERE table_schema = '数据库名' and table_name in (select table_name from tab)

UNION ALL

SELECT table_name, -1 ordinal_position, NULL, NULL, NULL

FROM tab

UNION ALL

SELECT table_name, 0 ordinal_position, NULL, NULL, NULL

FROM tab

UNION ALL

SELECT table_name, 999 ordinal_position, NULL, NULL, NULL

FROM tab

ORDER BY table_name, id) a;
————————————————
版权声明:本文为CSDN博主「南都有雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_33220360/article/details/113216501

posted @   CHANG_09  阅读(1043)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示