Mysql事件调度器(Event Scheduler)类似于定时器,可以在某一个时间点执行一个SQL语句或一个语句块(BEGIN ... END);或者每隔固定间隔重复执行。类似于Linux下的crontab,或Windows下的Task Scheduler。

 
一、事件调度器的配置
所有事件都是在事件调度线程(event scheduler thread)里面执行的;当提及事件调度器时,通常指该线程。如果用户有PROCESS权限,可以通过SHOW PROCESSLIST命令来查看该线程及其状态:

Mysql使用存储过程和Event事件定期删除数据

整个过程总共分为三步:

1. 写存储过程

2. 写Event事件

3. 把Event事件设置成Enable并打开事件任务

1. 存储过程

首先定义一个存储过程,del_data,传入一个int参数就是保留的log内容天数,过程的内容就是删除t_xxx表一周外的数据和删除t_log表的保留天数外的数据。

create procedure del_data(IN `date_inter` int)
begin
delete from t_xxx where date < date_sub(curdate(),interval 7 day);
delete from t_log where date < date_sub(curdate(),interval date_inter day);
end

2. 写Event事件

定义del_event,在Event事件中定义事件执行的开始事件和频率,事件设置成Enable,并且到点的时候执行del_data存储过程(传进去的天数是30天)。

create event del_event
on schedule
EVERY 1 day
STARTS '2014-01-01 03:00:00'
ON COMPLETION PRESERVE ENABLE
do call del_data(30)

还可以控制事件的开启个关闭:

关闭事件任务: alter event del_event ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event del_event ON COMPLETION PRESERVE ENABLE;

你也可以使用show events看看刚才新建的事件。

3. 打开事件任务

查看event是否开启: show variables like '%sche%';
将事件计划开启: set global event_scheduler = ON;

当然,你也可以把存储过程写在Event事件中,就是不太规范啦:

delimiter |

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END | delimiter ;

http://www.2cto.com/database/201402/278096.html

1.显示数据库中所有的存储过程

  1. show procedure status;

2.显示某个存储过程的详细信息(sp为存储过程名称)

  1. show create procedure sp;

3.显示当前库中所有表

  1. show tables;

4.显示某个表的建表语句(test为表名)

  1. show create table test;

5.删除存储过程(sp为存储过程名称)

  1. drop procedure if exists sp;

6.先建表

  1. --设置分隔符为双斜杠(//),默认为分号(;),由于存储过程中要用到分号,固将结束分隔符设置为双斜杠
  2. delimiter//
  3. DROP TABLE if exists test //
  4. CREATE TABLE test(id int(11) NULL) //

7.最简单的存储过程

  1. drop procedure if exists sp//
  2. CREATE PROCEDURE sp() select 1 //
  3. --调用存储过程
  4. call sp()//

8.带输入参数的存储过程

  1. drop procedure if exists sp1 //
  2. create procedure sp1(in p int)
  3. begin
  4. --声明一个int类型的变量
  5. declare v1 int;
  6. --将参数传给声明的变量,此步骤多余,可不要
  7. set v1 = p;
  8. insert into test(id) values(v1);
  9. end
  10. //
  11. --调用这个存储过程
  12. call sp1(1)//
  13. --去数据库查看调用之后的结果
  14. select * from test//

9.带输出参数的存储过程

  1. drop procedure if exists sp2 //
  2. create procedure sp2(out p int)
  3. begin
  4. select max(id) into p from test;
  5. end
  6. //
  7. --调用该存储过程,注意:输出参数必须是一个带@符号的变量
  8. call sp2(@pv)//

10.带输入和输出参数的存储过程

  1. drop procedure if exists sp3 //
  2. create procedure sp3(in p1 int , out p2 int)
  3. begin
  4. if p1 = 1 then
  5. --用@符号加变量名的方式定义一个变量,与declare类似
  6. set @v = 10;
  7. else
  8. set @v = 20;
  9. end if;
  10. --语句体内可以执行多条sql,但必须以分号分隔
  11. insert into test(id) values(@v);
  12. select max(id) into p2 from test;
  13. end
  14. //
  15. --调用该存储过程,注意:输入参数是一个值,而输出参数则必须是一个带@符号的变量
  16. call sp3(1,@ret)//
  17. select @ret//

11.既做输入又做输出参数的存储过程

    1. drop procedure if exists sp4 //
    2. create procedure sp4(inout p4 int)
    3. begin
    4. if p4 = 4 then
    5. set @pg = 400;
    6. else
    7. set @pg = 500;
    8. end if;
    9. select @pg;
    10. end//
    11. call sp4(@pp)//
    12. --这里需要先设置一个已赋值的变量,然后再作为参数传入
    13. set @pp = 4//
    14. call sp4(@pp)//

http://weidongke123-126-com.iteye.com/blog/1675375

mysql Event、存储过程、表命令的更多相关文章

  1. sql语句备份/导入 mysql数据库或表命令

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/30049851

  2. MySQL中将数据库表名修改成大写的存储过程

    原文:MySQL中将数据库表名修改成大写的存储过程 MySQL中将数据库表名修改成大写的存储过程 创建存储过程的代码: DROP PROCEDURE IF EXISTS uppercaseTablen ...

  3. mysql详解常用命令操作,利用SQL语句创建数据表—增删改查

    关系型数据库的核心内容是 关系 即 二维表 MYSQL的启动和连接show variables; [所有的变量] 1服务端启动 查看服务状态 sudo /etc/init.d/mysql status ...

  4. MYSQL 使用存储过程批量更新表数据

    功能:实现将表result_good_city_dzl中的字段lat更新为表 result_good_city_lh中的lat,条件是两个表中的id一样 即: update result_good_c ...

  5. mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

    step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// ...

  6. mysql的存储过程,函数,事件,权限,触发器,事务,锁,视图,导入导出

    1.创建过程 1.1 简单创建 -- 创建员工表 DROP TABLE IF EXISTS employee; CREATE TABLE employee( id int auto_increment ...

  7. MySQL数据库以及表的管理

    MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有 ...

  8. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  9. MySql创建存储过程,并使用事件定时调用

    一.使用命令行创建存储过程的步骤 :参数详情参考 https://www.mysqlzh.com/ 1.模板  delimiter $$ # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ' ...

随机推荐

  1. Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符 ...

  2. ZOJ3765---Lights (Splay伸展树)

    Lights Time Limit: 8 Seconds      Memory Limit: 131072 KB Now you have N lights in a line. Don't wor ...

  3. 传阿里整合资源,进军O2O市场

    阿里巴巴对于本地生活市场,以及O2O领域始终虎视眈眈.从最早的融合口碑网,到最近阶段推出淘宝点点.收购高德地图等一系列app产品,其整合线上线下消费市场的野心已十分明显. 今年年初,阿里巴巴集团重新进 ...

  4. Go--包引用介绍

    最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理). 和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包.首先介绍在程序中如何引入包,引入包有以下几种方式: 1. ...

  5. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

  6. Web Service 初步了解

    Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通, ...

  7. NetAnalyzer笔记 之 一. 开篇语

    [创建时间:2015-08-26 22:00:12] NetAnalyzer下载地址 第一次写技术相关的博客,不足之处还请担待并告知. 在开始之前,先简单介绍一下NetAnalyzer, NetAna ...

  8. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  9. 使用sublime text2怎样新建文件高速生成HTML头部信息?

    前提须要安装Emmet插件.安装完毕后重新启动sublime. 输入下面简写,按Tab. html:4t <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  10. 事关Animation Tree的工作随笔(二)

    上回说到,游戏项目中客观会遇到逻辑状态的复杂性和动画状态的单一性之间的矛盾,那么Animation Tree是如何解决这个问题的呢? 这又需要引入一个定律:就是逻辑状态无论有多么复杂,但一套逻辑状态组 ...