MYSQL批量创建表的存储过程
因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动。然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现:
首先是创建表的:( LPAD(`@i`, 2, '0')的作用 是将1,2,3这些数字转化为'01','02','03')
DROP PROCEDURE IF EXISTS `create_tables`; CREATE PROCEDURE create_tables ()
BEGIN DECLARE `@i` INT (11);
DECLARE `@createSql` VARCHAR (2560);SET `@i` = 0;
WHILE `@i` < 100 DO
-- 创建表
SET @createSql = CONCAT(
"CREATE TABLE IF NOT EXISTS guess_record",
LPAD(`@i`, 2, ''),
"(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userid` int(12) unsigned NOT NULL COMMENT '用户ID',
`issue` int(10) unsigned NOT NULL COMMENT '期号',
`options_id` int(10) unsigned NOT NULL COMMENT '选项ID',
`guess_time` int(10) unsigned NOT NULL COMMENT '答题时间',
`is_stat` tinyint(4) NOT NULL COMMENT '是否统计过',
PRIMARY KEY (`id`),
KEY `issue` (`issue`) USING BTREE,
KEY `userid` (`userid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"
);
PREPARE stmt FROM @createSql;
EXECUTE stmt;
SET `@i` = `@i` + 1; END WHILE; END
然后是批量删除表的(嘿嘿,搞事情)
DROP PROCEDURE IF EXISTS `drop_tables`; CREATE PROCEDURE drop_tables ()
BEGIN DECLARE `@i` INT (11);
DECLARE `@dropSql` VARCHAR (2560); SET `@i` = 0;
WHILE `@i` < 100 DO
-- 创建表
SET @dropSql = CONCAT("DROP TABLE IF EXISTS guess_record",LPAD(`@i`, 2, ''));
PREPARE stmt FROM @dropSql;
EXECUTE stmt;
SET `@i` = `@i` + 1; END WHILE; END
我用这个存储过程其实就是一次性的,所以完整的过程是 1、创建存储过程 2、执行存储过程(批量创建表)3、删除存储过程
#1:创建存储过程
DROP PROCEDURE IF EXISTS `create_tables`;
DELIMITER $$ //定义结束符
CREATE PROCEDURE create_tables ()
BEGIN DECLARE `@i` INT (11);
DECLARE `@createSql` VARCHAR (2560); SET `@i` = 0;
WHILE `@i` < 100 DO
-- 创建表
SET @createSql = CONCAT(
"CREATE TABLE IF NOT EXISTS guess_record",
LPAD(`@i`, 2, ''),
"(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userid` int(12) unsigned NOT NULL COMMENT '用户ID',
`issue` int(10) unsigned NOT NULL COMMENT '期号',
`options_id` int(10) unsigned NOT NULL COMMENT '选项ID',
`guess_time` int(10) unsigned NOT NULL COMMENT '答题时间',
`is_stat` tinyint(4) NOT NULL COMMENT '是否统计过',
PRIMARY KEY (`id`),
KEY `issue` (`issue`) USING BTREE,
KEY `userid` (`userid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"
);
PREPARE stmt FROM @createSql;
EXECUTE stmt;
SET `@i` = `@i` + 1; END WHILE; END $$
DELIMITER ; //结束符改为;
#2:执行存储过程
CALL `create_tables`();
#3:删除存储过程
DROP PROCEDURE IF EXISTS `create_tables`;
MYSQL批量创建表的存储过程的更多相关文章
- mysql 批量创建表,利用存储过程
最近根据需求,需要提前创建一批日志表,以日期结尾,每天创建一张,例如XXX20160530,请参考如下: BEGIN DECLARE `sName` VARCHAR(128); DECLAR ...
- mysql 批量创建表
使用存储过程 BEGIN DECLARE `@i` int(11); DECLARE `@sqlstr` varchar(2560); SET `@i`=0; WHILE `@i` < ...
- MYSQL定时创建表分区
MYSQL定时创建表分区 一.存储过程-表分区-----------------------------------------------------------------需求: 每月创建一个分区 ...
- 在SSMS里批量删除表、存储过程等各种对象
在SSMS里批量删除表.存储过程等各种对象 以前想找批量删除表或者存储过程的方法,原来SSMS的GUI界面也可以完成 请看下图,因为这次出差的时候要删除所有的存储过程,然后重建这些存储过程 而表.函数 ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- mysql 在创建表或者插入时遇到关键字报错
mysql 在创建表或者插入时遇到关键字:比如name,status等.都不报错 解决方法:在字段上加上` 上面这个符号是键盘ecs下面那个符号
- MySql数据库创建表
3.3.MySql数据库创建表 创建5个表: UserInfo用户基础表 Role 角色表 MenuInfo 菜单即控制表 Relation_Role_Menu 角色对应菜单关系表 RelaTion_ ...
- Mysql 批量建表存储过程
最近项目中用到了使用存储过程批量建表的功能,记录下来: USE db_test_3; drop procedure if EXISTS `createTablesWithIndex`; create ...
- MYSQL批量修改表前缀与表名sql语句
修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', ta ...
随机推荐
- 2.1_springboot2.x消息介绍&RabbitMQ运行机制
1.概述 1.大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力 2.消息服务中两个重要概念: 消息代理(message broker)即消息服务器 和目的地(destination ...
- .net 超链接传值,传过去始终是null
今天做了一个删除功能,通过点击列表中的删除超链接,通过get请求,跳转到一个处理程序执行删除操作 . 因为不熟悉各种报错 , <%="<td> <a class='d ...
- 转——调试寄存器 原理与使用:DR0-DR7
下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结. 希望能给你带去有用的信息. (DRx对应任意的一个调试寄存器. ...
- Linux下mysql实现远程连接
首先明白一点并不是mysql禁止远程连接,而是MYSQL的账号禁止远程连接.可能觉得我有点咬文嚼字了,不过我感觉分清这点还是很重要的.默认情况下,所有账号都是禁止远程连接的.在安装MYSQL的时候,在 ...
- 【学术篇】SDOI2008 山贼集团
今天一月一号.. 突然想安利一波我的中二的2017总结... 传送门1:codevs 传送门2:luogu 时限5s和1s的区别(你没看我传送门都给的大牛分站了) 现在不仅线筛.. 有负数的快读都打不 ...
- JS去重算法
1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5, ...
- MySQL基础知识 数据库 数据表
1.数据库结构 库 表 数据 2. sql(structured query language)结构化查询语言 管理数据库 管理表 管理数据 3.数据库 增删改查 增 create database ...
- csps模拟9495凉宫春日的忧郁,漫无止境的八月,简单计算,格式化,真相题解
题面:https://www.cnblogs.com/Juve/articles/11767239.html 94,95的T3都没改出来,是我太菜了... 凉宫春日的忧郁: 比较$x^y$和$y!$的 ...
- Xcode 5 SVN配置
from:http://stackoverflow.com/questions/19180718/import-a-project-in-svn-from-xcode-5/19410994#19410 ...
- 可拖拽排序的vue组件
最近在优化一个vue的博客系统,想实现文章列表处的文章拖拽功能.就试了一下awe-dnd vue插件,觉得还挺好用的. 安装 npm install awe-dnd --save 使用 在main.j ...