博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL批量创建表的存储过程
阅读量:6747 次
发布时间:2019-06-25

本文共 2376 字,大约阅读时间需要 7 分钟。

 

因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动。然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现:

首先是创建表的:( LPAD(`@i`, 2, '0')的作用 是将1,2,3这些数字转化为'01','02','03')

DROP PROCEDURE IF EXISTS `create_tables`;CREATE PROCEDURE create_tables ()BEGINDECLARE `@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, '0'),    "(  `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 ()BEGINDECLARE `@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, '0'));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 ()BEGINDECLARE `@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, '0'),    "(  `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`;

 

转载于:https://www.cnblogs.com/liaokaichang/p/8893135.html

你可能感兴趣的文章
python time
查看>>
开源软件 与 自由软件
查看>>
Leap Motion API类库:ScreenTapGesture&SwipeGesture
查看>>
射频技术(RFID)的安全协议
查看>>
2014-07-20 Java Web的学习(17)-----struts2(3)----OGNL&ValueStack
查看>>
eclipse/MyEclipse 注释日期格式
查看>>
大数阶乘
查看>>
第三届云计算大会 - 中兴副总裁吕阿斌:云计算实务的关键要素(转载)
查看>>
xcode 快捷键大全
查看>>
shell编写动态页面
查看>>
Android系统小知识
查看>>
关于内核
查看>>
Spring MVC 学习笔记 进阶版
查看>>
微软正式关闭Office Live小企业服务
查看>>
DB2数据库字典表使用
查看>>
【leetCode】208. Implement Trie (Prefix Tree) ------Java
查看>>
我的友情链接
查看>>
pgbench 获取事务执行平均时间
查看>>
eclipse下properties文件中文乱码的解决方案
查看>>
我的友情链接
查看>>