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 查看表及索引空间大小

查看数据库占用空间 SELECT CONCAT(ROUND((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/(1024*1024),2...

3275
来自专栏乐沙弥的世界

Oracle 索引监控与外键索引

      Oracle 监控索引特性为我们提供了一个大致判断索引是否被使用的情形。之所以这么说,是因为在Oracle 10g 中收集统计信息时会导致索引被监控...

992
来自专栏Netkiller

数据库记录安全解决方案

目录 1. 什么是防删除,防撰改 2. 为什么要做防删除,防撰改限制 3. 何时做防删除,防撰改限制 4. 在哪里做防删除,防撰改限制 5. 谁去做防删除,防撰...

2885
来自专栏idba

主从默认字符集不一样导致的主从同步报错

在使用pt-table-checksum 校验主从的过程的时候,在创建dsns 表之后,往dsns表写入从库dsn信息的时候,从库的SQL线程就挂了,报错信息如...

502
来自专栏Python、Flask、Django

mysql视图,ThinkPHP视图

1534
来自专栏跟着阿笨一起玩NET

sql server根据表中数据生成insert语句

修正了表中的字段如果是SQL中的关键字(如Order)时,生成的脚本执行会出错的bug

791
来自专栏nnngu

019 单例模式的5种写法

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点! 1、懒汉 public class Singleton { private st...

2824
来自专栏Netkiller

数据库安全·时间一致性

以下节选择《Netkiller Architect 手札》地址 http://www.netkiller.cn/architect/ 接下来几周的话题是数据库安...

3517
来自专栏别先生

MYSQL中约束及修改数据表

MYSQL中约束及修改数据表 28:约束 约束保证数据的完整性和一致性 约束分为表级约束和列级约束 约束类型包括:     NOT NULL(非空约束)   ...

2098
来自专栏nummy

MySQL取得日期(前一天、某一天)

mysql> select date_sub(curdate(),interval 1 day); +----------------------------...

762

扫码关注云+社区