具体不多说,直接上代码。欢迎一起交流和学习。

创建一个按月创建表的存储过程,SQL语句如下:

DELIMITER //

DROP PROCEDURE IF EXISTS create_table_by_month //

CREATE PROCEDURE `create_table_by_month`()

BEGIN

#--提前申明变量,后面会用到

DECLARE nextMonth varchar(20);

DECLARE nextTABLE varchar(20);

DECLARE csql varchar(5210);

DECLARE outputParam int;

DECLARE tableName_1 varchar(20);

DECLARE tableName_2 varchar(20);

DECLARE table_prefix varchar(20);

#--获取下个月

SELECT SUBSTR(replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', ''), 1, 6) INTO @nextMonth;

#--对上面的SQL语句拆分分析:

#MySQL时间函数date_add()为日期增加一个时间间隔,此sql的意思就是当前日期增加一个月后的日期

#select DATE_ADD(CURDATE(), INTERVAL 1 MONTH);

##返回20201006

#select replace('2020-10-06', '-', '');

##返回20201006

#select replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', '');

##返回202010

#SELECT SUBSTR(20201006,1,6);

##赋值到变量@nextMonth 中

#SELECT SUBSTR(20201006,1,6) INTO @nextMonth;

# 表1

#设置表前缀变量值为td_user_banks_log_

set @table_prefix = 'td_user_banks_log_';

#定义表1的名称

SET @tableName_1 = CONCAT(@table_prefix, @nextMonth);

##定义创建表的SQL语句

set @csql=concat("create table if not exists ",@tableName_1,"(

`id` int(11) NOT NULL AUTO_INCREMENT,

`app_id` varchar(100) NOT NULL,

`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID',

`type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 签到奖励 2 活动奖励 3 兑换',

`gold_coin` int(11) NOT NULL,

`remarks` varchar(200) NOT NULL DEFAULT '' COMMENT '备注',

`create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),

KEY `app_id` (`app_id`),

KEY `user_id` (`user_id`),

KEY `type` (`type`),

KEY `create_at` (`create_at`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

#PREPARE介绍:

##语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。

##preparable_stmt可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。该文本必须表现为一个单一的SQL语句,而不是多个语句。

PREPARE create_stmt from @csql;

EXECUTE create_stmt;

DEALLOCATE PREPARE create_stmt;

# 表2 和表1是同样的SQL,此处不做介绍:

set @table_prefix = 'td_sign_log_';

SET @tableName_2 = CONCAT(@table_prefix, @nextMonth);

set @csql=concat("create table if not exists ",@tableName_2,"(

`id` int(11) NOT NULL AUTO_INCREMENT,

`app_id` varchar(100) NOT NULL,

`user_id` int(11) NOT NULL,

`day` int(11) NOT NULL DEFAULT '0' COMMENT '天',

`sign_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 签到 2 补签 3 累计奖励',

`type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 金币',

`num` int(11) NOT NULL DEFAULT '0',

`data_id` int(11) NOT NULL DEFAULT '0',

`create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),

KEY `app_id` (`app_id`),

KEY `user_id` (`user_id`),

KEY `type` (`type`),

KEY `data_id` (`data_id`),

KEY `create_at` (`create_at`),

KEY `sign_type` (`sign_type`),

KEY `day` (`day`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

PREPARE create_stmt from @csql;

EXECUTE create_stmt;

DEALLOCATE PREPARE create_stmt;

SELECT COUNT(1) INTO @outputParam FROM information_schema.`TABLES` WHERE TABLE_NAME in (@tableName_1, @tableName_2);

SELECT @outputParam;

END //

delimiter ;

#--每月创建一个当月表的定时任务:

create EVENT `create_table_by_month` ON SCHEDULE EVERY 1 MONTH STARTS '2020-09-06 12:40:00' ON COMPLETION NOT PRESERVE ENABLE DO call create_table_by_month();

常识提示:在计划任务中,某个具体的时间来调用存储过程SQL1语句执行。这个指定的具体时间必须是将来的时间才可以的

#查看创建存储过程的SQL语句:

show create PROCEDURE create_table_by_month\G

#删除存储过程:

DROP PROCEDURE IF EXISTS create_table_by_month;

#删除计划任务

drop event create_table_by_month1;

以上存储过程的SQL语句和定时器的SQL语句都是生产环境使用过的

#排查报错:

发现mysql的日志报错,原来的存储过程的SQL语句里面增加的索引键字段正好是表中不存在的字段,所以包下面的错误。于是去掉存储过程中的索引键字段SQL就OK了。

2020-09-06T12:40:00.244879+08:00 604392 [ERROR] Event Scheduler: [root@localhost][test0001.create_table_by_month1] Key column 'sign_date' doesn't exist in table

2020-09-06T12:40:00.244926+08:00 604392 [Note] Event Scheduler: [root@localhost].[test0001.create_table_by_month1] event execution failed.

上述的存储过程只是本博主线上业务环境的SQL,切勿直接套用,造成损失与本博文无关。鉴于学习交流初心发表此处,仅供大家学习交流参考用。

mysql 存储过程月单拆天单_MySQL之存储过程按月创建表相关推荐

  1. mysql 存储过程月单拆天单_MySQL之存储过程按月创建表的方法步骤

    具体不多说,直接上代码.欢迎一起交流和学习. 创建一个按月创建表的存储过程,SQL语句如下: DELIMITER // DROP PROCEDURE IF EXISTS create_table_by ...

  2. mysql怎么创建表视频教程_mySQL学习入门教程——2.创建表

    二.创建表 一.创建数据表的SQL语句模型(弱类型) CREATE TABLE [IF NOT EXISTS] 表名称( 字段名1 列的类型[属性][索引], 字段名2 列的类型[属性][索引], - ...

  3. mysql 存储过程月单拆天单_为部门整理的mysql_db使用军规

    mysql_db使用军规: 1.禁止开发测试人员在IDC环境手工删除和修改数据 2.所有需求通过DB工具系统提交 3.禁止在IDC环境DB进行测试 4.IDC环境提交的sql语句一定要经过非正式环境验 ...

  4. mysql的查询每个月的1号_MySql查询当年1-12月数据

    mysql查询当年1-12月数据. select count(*) as jantradingvolume, coalesce(sum(tt.amount),0) as janamount, (sel ...

  5. mysql存储过程语法和游标的语法_MySQL游标存储过程-语法点滴

    CREATE PROCEDURE my_proc() BEGIN -- 需要定义接收游标数据的变量 DECLARE sname VARCHAR(100); DECLARE cattype VARCHA ...

  6. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  7. mysql中如何删除多个表格_mysql怎么批量删除多个表?

    mysql批量删除多个表的方法:使用"DROP TABLE"语句,只要将表名依次写在后面,相互之间用逗号隔开即可:语法格式"DROP TABLE [IF EXISTS] ...

  8. mysql中删除标识列的语句_MySQL中一些常用的数据表操作语句笔记

    0.创建表 CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件]) "完整性约束条件&quo ...

  9. mysql查询出来的数据用连接_mysql – 使用查询从连接的表中检索数据

    我想做的事: 我想检索有关客户的所有数据字段(包括与他相关的表中的所有数据(例如,引用的国家和数据字段的数据字段) 我想将我的查询作为idUser的参数. 这是我的EER图: 我尝试了什么: SELE ...

最新文章

  1. h5页面笔按下默认是拖动,H5中在拖动的元素或选择的文本进入到有效的放置目标时触发的事件ondragenter...
  2. WinXP/2000操作系统自动关机的实现
  3. onnx模型部署(一) ONNXRuntime
  4. linux 切换python版本_linux下多个python版本切换如何设置
  5. 文明重启服务器维护怎么卡进去,文明重启更新之后进不去,具体玩法介绍
  6. IE8开发人员工具资料
  7. 安卓中经常使用控件遇到问题解决方法(持续更新和发现篇幅)(在textview上加一条线、待续)...
  8. npoi 所有列调整为一页_别再浪费纸了,一张纸就能打印Word、Excel、PPT所有内容,真厉害...
  9. python字典更改元素_python – 返回带有一个已更改元素的字典
  10. Java学习关于集合框架的基础接口--Collection接口
  11. mysql集群方案,保准看明白!
  12. 程序员——神圣的职业
  13. vs2008 清理后再编译后卡顿_更新后,竟有这么“严重”的后果?
  14. c++ 编程规范技巧
  15. paip.提升用户体验---论文本编辑器的色彩方案
  16. Linux源码编译bison和flex
  17. EnableQ在企业员工满意度调查上的贡献
  18. 清华大学超级计算机中心,中国科学技术大学超级计算中心
  19. 京东云的区块链“经”
  20. html特殊符号小企鹅,企鹅侦探名字如何取特殊 名字可以使用的特殊符号

热门文章

  1. 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...
  2. C语言实现数据文件怎么找,急求如何将下列C语言程序数据存储到文件中?
  3. html5 popup,popup.js-jQuery和CSS3可互动的3D弹出窗口插件
  4. html增加状态信息管理代码,JavaScript+HTML实现学生信息管理系统
  5. java中保存图片到本地_java保存网络图片到本地
  6. python xml字符串和dict字典互转
  7. 交换友链的几个技巧!
  8. 【Harvest源码分析】NuttallWindow
  9. LeetCode 542. 01 Matrix--C++解法--动态规划
  10. LeetCode 17. Letter Combinations of a Phone Number--笔试题--C++,Python解法