MySQL中存储过程+事件的使用方法
一、背景
将界面操作日志存储在MySQL数据库中的operationlog表中,如果该表不能自动备份,表中的数据会越来越多,影响速度。可以定期将表中数据备份到另外一个表中来解决。
二、解决方案
1、使用MySQL中的存储过程+事件解决。
存储过程逻辑为:
1)创建一个新表operationlog_temp,各字段同operationlog相同;
2)将表operationlog更名为operationlog_yyyy-mm-dd;
3)将表operationlog_temp更名为operationlog
事件逻辑为:
1)每个3个月定时调用一次存储过程bakOpLog
2、定义存储过程bakOpLog:
【注】
开始事件功能(MySQL必须先开启事件功能,才能使用事件),用如下SQL语句
SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = ON;
1
2
3
4
5
6
7
8
9
10
11
|
CREATE DEFINER=`sa`@`%` PROCEDURE `bakOpLog`() BEGIN create table operationlog_temp like operationlog; set @i= current_date (); --执行rename table operationlog to operationlog_yyyy-mm-dd set @sqlstr=CONCAT( 'rename table operationlog to `operationlog_' , cast (@i as char ), '`' ); select @sqlstr; PREPARE renameOpLog FROM @sqlstr; EXECUTE renameOpLog; rename table operationlog_temp to operationlog; END ; |
3、定义事件callProcedureBakOpLog
1
|
CREATE DEFINER=`sa`@`%` EVENT `callProcedureBakOpLog` ON SCHEDULE EVERY 1 DAY STARTS '2014-12-30 00:00:00' ENDS '2015-01-06 00:00:00' ON COMPLETION PRESERVE ENABLE DO call bakOpLog(); |
4、存储过程用到的一些语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
set @i= current_date (); //将全局变量i赋值为当前日期 set @sqlstr=CONCAT( 'rename table operationlog to `operationlog_' , cast (@i as char ), '`' ); //sqlstr=rename table operationlog to operationlog_yyyy-mm-dd PREPARE renameOpLog FROM @sqlstr; //定义预处理语句 EXECUTE renameOpLog; //执行预处理语句 查看创建的事件 SHOW EVENTS; 也可以在mysql库中产看event表 1) 临时关闭事件 ALTER EVENT e_test DISABLE; 2) 开启事件 ALTER EVENT e_test ENABLE; 3) 将每天清空test表改为5天清空一次: ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY ; 4) 删除事件( DROP EVENT) DROP EVENT [IF EXISTS] event_name 例如删除前面创建的e_test事件 DROP EVENT e_test; 当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS DROP EVENT IF EXISTS e_test; |
5、使用MySQL管理工具MySQL-Front操作存储过程、事件的简介操作
1)定义存储过程、事件
2)直接在mysql库中查看event表,该表中有定义过的事件
MySQL中存储过程+事件的使用方法的更多相关文章
- Mysql中event事件的入门
Mysql中event事件的入门 主要涉及的知识点:mysql的存储过程.mysql的event事件调度. 参考资料: Qiao_Zhi的博客:[周期性执行事件]MySQL事件(Event)& ...
- Windows Server 2008中关闭事件跟踪程序的方法
Windows Server 2008跟Windows Server 2003一样,在关机的时候会弹出一个“关闭事件跟踪程序”窗口,当然微软这么做是处于安全的考虑啦,但是如果我们只是个人用用的话,那就 ...
- SqlServer和MySQL中存储过程out返回值处理C#代码
1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // stri ...
- 在C++Builder中定义事件的实现方法
++Builder是由Borland公司推出的一款可视化集成开发工具.C++Builder的集成开发环境(IDE)提供了一系列可视化快速应用程序开发(RAD)工具,让程序员可以很轻松地建立和管理自己的 ...
- Mysql中存储过程和函数的写法
MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine ...
- MYSQL中存储过程的创建,调用及语法
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
- [转]MySQL中存储过程权限问题
MySQL中以用户执行存储过程的权限为EXECUTE 比如我们在名为configdb的数据库下创建了如下存储过程,存储过程的定义者为user_admin use configdb; drop proc ...
- mysql中的load命令使用方法
使用mysql 中的load 命令,可以将txt 文件中的内容加载到数据库表中 使用mysql 中的load 命令,讲txt 文件中的内容加载到数据库表中,例如,创建table,名称是user,一个字 ...
- MySQL中判断日期间隔的方法
MySQL中查询一定时间间隔内的数据的方法比较常用,可以使用TO_DAYS.DATE_SUB等函数来实现. TO_DAYS函数的作用是返回指定日期从0年开始计算的天数. DATE_SUB函数的作用是通 ...
随机推荐
- -Three.js开发指南---用three.js创建你的第一个三维场景(第一章)
本章主要做了下面的工作 1 生成一个简单的场景,该场景的物体只有平面和坐标轴 2 在第一个demo的基础上添加光源和方块物体,并生成阴影 3 在第二个demo的基础上,增加动画,使得方块进行旋转 4 ...
- 数据绑定时(<%#Eval)单引号双引号嵌套问题
期望得到的HTML如下: onclick='edit("10000001")' 或者 onclick="edit('10000001')" 实际ASP.NET前 ...
- day1作业--登录入口
作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...
- 转贴:让Windows 2008 R2 64bit支持ASP.NET 1.1应用程序
随着 Windows Server 2003 的支持期限到期, 最近有很多企业将目前很多的 Windows Server 2003 升级到 Windows 2008 R2. 之前有许多 Web App ...
- php 升级排错
lnmp 环境下,升级php版本,模块都加载完成,数据库,nginx 设置都完好,但php 只能用ip 访问数据库,不能用localhost,处理要设置php.ini 的三个mysqld.sock,还 ...
- 错误 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\users\vs2013\le
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void main(){ int nu ...
- TP中的session和cookie
session:1.session('name','value'); //设置session2.$value = session('name'); // 获取所有的session 3.2.2版本新 ...
- Frameset的使用
一.frameset 1. 属性 ①border 设置框架的边框粗细. ②bordercolor 设置框架的边框颜色. ③frameborder 设置是否显示框架边框.设定值只有0.1:0 表示不要边 ...
- Xcode磁盘空间大清理
我的设备是Macbook Air 13' Mid 2011,128G SSD.最近开始有些存储压力了,用Clean My Mac清理一部分旧文件后,决定对Xcode动手. 移除对旧设备的支持 影响:可 ...
- eclipse 断点使用深入技能
原文:http://blog.jobbole.com/26435/ 摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程 ...