MySQL批量生成建表语句
文章目录
- 整体说明
- 一、需求背景
-
- 1.1、需求特点
- 1.2、权限限制
- 二、方案选择
-
- 2.1、使用工具
-
- 2.1.1、Navicat 或者 DataGrip
- 2.1.2、Dbeaver
- 2.2、写SQL脚本
-
- 2.2.1、前置知识
- 2.2.2、依赖系统表
- 2.2.3、生成语句元素
- 2.2.4、建表语句准备
- 2.2.5、SQL脚本
- 2.2.6、缺点说明
- 2.2.7、效果展示
摘要: MySQL批量生成建表语句
关键词: MySQL、大批量、挑选、建表语句
整体说明
在使用MySQL的时候,遇到需要在大批量的表中,挑选一部分表,权限又只有只读权限,工具又没有合适的,最终使用了MySQL后台表,生成建表语句,具体的做法,大致如下:
一、需求背景
1.1、需求特点
- 表数量大: 从如下截图可以看出,这个库总计369张表。
- 指定表列表: 从如下 EXCEL 列表可知,总计选择了 258张指定表,做数据集成,数据集成工具无法自动创建目的表。
1.2、权限限制
- 表只读权限: 由于公司要求,生产环境的数据库,只能给 只读 ,所以没法通过创建函数和存储过程的方式。
- 网络无法联通: 网络环境是生产的环境,本地没有办法直接写程序通过JDBC等方式,连接数据库,查询数据,只能通过 VPN + 堡垒机 连接,也没有上传部署程序的权限。
- 可以读系统 information_schema 库: 只读权限,可以读取系统库, information_schema 库 ,为我们后面的方案,提供的可能性。
二、方案选择
2.1、使用工具
2.1.1、Navicat 或者 DataGrip
这里以 DataGrip 举例,在这个功能来看,二者没有区别。
-
关键字筛选: 直接在左侧输入 accout 就能把表筛选出来,然后选中,右键生成SQL即可。
-
全量生成: 如果不筛选,直接点击生成,会全量生成所有建表语句
-
2.1.2、Dbeaver
关键字筛选 和 全量生成,这里就不再举例了,也支持。
-
"过滤器"筛选: 依据下图,操作,配置过滤器,并把对应表名,添加进去,之后即可过滤表。
当我用这个工具时,我以为已经搞定了,结果这个过滤器添加那里只能一张表一张表添加,我这个 229张表,直接吐血,用不了!!
2.2、写SQL脚本
2.2.1、前置知识
前置知识,如下图简单介绍,如果需要再详细了解,可以查阅官方文档。
2.2.2、依赖系统表
依赖系统表简单列举如下图:
2.2.3、生成语句元素
2.2.4、建表语句准备
准备三张测试表,从简单到复杂,列举了建表语句中 90% 以上的情况
学生信息表,只包含基础元素
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (
`id` varchar(64) NOT NULL COMMENT '数据标识',
`create_user` varchar(200) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user` varchar(200) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`student_id` varchar(200) DEFAULT NULL COMMENT '学生id',
`student_name` varchar(200) DEFAULT NULL COMMENT '学生姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='学生信息表';
部门信息表,额外增加了索引的相关信息
DROP TABLE IF EXISTS `t_department`;
CREATE TABLE `t_department` (
`id` varchar(64) NOT NULL COMMENT '数据标识',
`create_user` varchar(200) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT