业务需求,把用户操作日志写入一张日志表sys_oper_log。
上线2个月来,有74万条记录了。
文章转载地址:https://www.cnblogs.com/bao-bei/p/13201747.html
现考虑要分库分表了。每个月初先备份以sys_oper_log为前缀,日期年月为后缀的数据库表,比如:sys_oper_log_202007 ,然后再创建一张以sys_oper_log数据库表。
实现思路:
Mysql如何每月自动建表?
一、新建事件每月调用存储过程
二、存储过程里面建表
1、获取当前时间,转换字符串
2、拼接sql语句建表
实现方法
把下面两段复制到sql,执行即可。
首先创建存储过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
然后创建事件每月1日执行上面的存储过程:
1 2 3 4 5 6 7 8 9 10 11 |
|
通过Navicate可以查看到
Mysql用存储过程和事件每月定时创建一张数据库表
这样就OK了!
扩展知识:
一、什么是存储过程?
在一些语言中,有“过程”这种概念,procedure,和"函数",function,
PHP中没有过程,只有函数。
过程:封装了若干条语名,调用时,这些封装体执行。
函数:是一个有返回值的过程。
过程:是没有返回值的函数。
我们把若干条sql封装起来,取个名字,---过程。
把此过程存储在数据库中,---存储过程。
存储过程创建语法:
定义:
create procedure procedureName()
begin
--sql语句;
end$
查看:
show procedure status;
调用:
call procedure()
存储过程是可以编程的
即可以用变量,表达式,控制语句来完成复杂的功能。
在存储过程中,用declare声明变量
格式: declare 变量名 变量类型。
例:
1 2 3 4 5 6 |
|
有变量,就能运算,有运算,有运算就能控制。
运算的结果,如何赋值给变量。
set 变量名:=变量值
例:
1 2 3 4 5 6 |
|
-- if/else控制结构
if condition then
statement
else
end if;
--p5 给存储过程传参
存储过程的括号里,可以声明参数,
语法是[in/out/inout] 参数名 参数类型
例:
1 2 3 4 5 6 7 8 9 10 11 |
|
call p5(3,4)$
二、定时器
1、删除定时器
1 |
|
2、暂停定时器
1 |
|
3、启动定时器
1 |
|
4、修改定时器
1 |
|
5、一些定时例子
1 2 3 4 5 6 7 8 9 10 11 12 |
|