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 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

Mysql 获取表的comment 字段

查看获取表内字段注释: > show full columns from tablename; 或是  show full fields from tab...

1571
来自专栏nnngu

019 单例模式的5种写法

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

2954
来自专栏Netkiller

数据库安全·时间一致性

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

3657
来自专栏idba

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

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

602
来自专栏从零开始的linux

mysql基础语法 字段

#插入字段 mysql> desc student; +-------+----------+------+-----+---------+-------+ |...

3355
来自专栏Python、Flask、Django

mysql视图,ThinkPHP视图

1684
来自专栏Java架构师历程

sql必会基础1

ALTER TABLE old_table_name RENAME [TO] new_table_name

1322
来自专栏我的博客

MYSQL死锁问题

如果insert或update用到了同样的索引也会造成死锁。 比如 update table_a set name = ‘test1’ where id =...

3606
来自专栏desperate633

MyISAM和InnoDB的对比

Mysql 数据库中,最常用的两种引擎是 innordb 和 myisam。InnoDB 是 Mysql 的默 认存储引擎。

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

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

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

1401

扫码关注云+社区

领取腾讯云代金券