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 ...
随机推荐
- jquery操作html元素之(添加元素)
添加新的 HTML 内容 我们将学习用于添加新内容的四个 jQuery 方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在 ...
- jquery下拉框应用
<!DOCTYPE html> <html lang="en"> <head> <script src="http://code ...
- Slow HTTP POST慢速攻击
测试工具 模拟测试工具:slowhttptest https://github.com/shekyan/slowhttptest 安装: https://github.com/shekyan/slow ...
- USACO 2009 Open Cow Line /// 队列 oj26220
题目大意: 输入n,n次操作 操作A:在L(左边)或R(右边)插入一个递增的数 操作D:在L(左边)或R(右边)删除m个数 Sample Input 10A LA LA RA LD R 2A RA R ...
- jsonArray转换成List
从字符串String转换成List 字符串格式: String jsonstr = "{'studentsjson':[{'student':'张三'},{'student':'李四'}] ...
- php 获取不到post的值
一般在ajax提交的时候出现这种情况 当我们在ajax参数设置 contentType: 'application/json; charset=utf-8', 用file_get_contents ...
- arm-linux-strip 的使用
3.2.1 1. 移除所有的符号信息 [arm@localhost gcc]#cp hello hello1 [arm@localhost gcc]#armlinuxstrip strip ...
- C++调用python(C++)
C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...
- 【转】keepalived+mysql
https://www.cnblogs.com/gomysql/p/3856484.html MySQL的高可用方案有很多,比如Cluster,MMM,MHA,DRBD等,这些都比较复杂,我前面的文章 ...
- CNN 常用的几个模型
LeNet5 论文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷 ...