MYSQL通过存储过程实现批量建表

适用于分表比较多的情况,如何批量创建,可通过存储过程实现。

存储过程批量执行只是临时使用,不建议业务使用存储过程,有些存储过程封装SQL较多,导致性能下降,不容易排查。

创建一个存储过程:红色为表结构,蓝色为表名及表数量,从0开始到255

MySQL root@[test]> delimiter //
MySQL root@[test]> create procedure sp_create_tab()
begin
set @str = " (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `bak0` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak1` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak2` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak3` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak4` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak5` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak6` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak7` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak8` varchar(128) DEFAULT NULL COMMENT '备用',
  `bak9` varchar(128) DEFAULT NULL COMMENT '备用',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `bak0` (`bak0`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='表'";
set @j = 0;
while @j < 256 do
set @table = concat('table_name_',@j);
set @sql_t = concat("CREATE TABLE ",@table,@str);
prepare sql_t from @sql_t;
execute sql_t;
set @j = @j + 1;
end while;
end
//

Query OK, 0 rows affected (0.00 sec)
MySQL root@[test]> delimiter ;
MySQL root@[test]> call sp_create_tab;
MySQL root@[test]> drop procedure sp_create_tab;

原文发布于微信公众号 - MYSQL轻松学(learnmysql)

原文发表时间:2018-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏康怀帅的专栏

MySQL 修改数据表 ALTER

修改列定义 ALTER table 表名 MODIFY 字段名 列定义 位置[FIRST | AFTER 字段名]; 修改列名称 ALTER table 表名 ...

3236
来自专栏个人随笔

MySQL 中国省市区SQL表数据

1.查省 SELECT * FROM china WHERE china.Pid=0 2.查市 SELECT * FROM chinaWHERE china.P...

2430
来自专栏云霄雨霁

数据更新语言DML

1300
来自专栏一个会写诗的程序员的博客

on duplicate key update

INSERT INTO issue_change(project_id, add_date, change_amount, base_line, gmt_cr...

602
来自专栏我的博客

触发器统计记录行数

a表保存记录,b表保存a表当中指定cid的总行数 CREATE TABLE `a` ( `id` int(11) unsigned NOT NULL AUT...

2897
来自专栏沃趣科技

MySQL8.0新特性——invisible indexes

MySQL 8.0版本中新增了invisible indexes(不可见索引)特性,索引被invisible后,MySQL优化器就会忽略该索引(无此特性时需要删...

42311
来自专栏idba

replace into 解析

在支持业务过程中,经常遇到开发咨询replace into 的使用场景以及注意事项,这里做个总结,从功能原理注意事项上做个说明。

892
来自专栏Netkiller

重新整理AUTO_INCREMENT字段

节选择《Netkiller MySQL 手札》 13.9. 重新整理AUTO_INCREMENT字段 AUTO_INCREMENT 并非按照我们意愿,顺序排列,...

2766
来自专栏破晓之歌

数据库练习

952
来自专栏Netkiller

重新整理AUTO_INCREMENT字段

节选择《Netkiller MySQL 手札》 13.9. 重新整理AUTO_INCREMENT字段 AUTO_INCREMENT 并非按照我们意愿,顺序排列...

3285

扫码关注云+社区