Mysql中Event的一些测试

Mysql的event schedule可以让你设置你的mysql数据库在某个时间段执行你想要的动作

  create event test1

  on schedule every 1 day

  starts '2007-09-01 12:00:00'

  on completion not preserve

  do insert into yyy values('hhh','uuu');

  或

  create event test

  on schedule at '2007-09-01 12:00:00' + interval 1 day

  on completion not preserve

  do insert into yyy values('hhh','uuu')

  解释:从2007年9月1日开始,每天对表yyy在12:00:00进行插入操作,并且只执行一次.

  使用这个功能之前必须确保event_scheduler已开启,可执行

  set global event_scheduler=1;

  或

  set global event_scheduler=on;

  来开启,也可以直接在启动命令上加上--event_scheduler=1.例如:

  mysqld...--event_scheduler=1

  另外也可以直接在mysql.ini或者mysql.cnf中添加

  event_scheduler=1

  要查看当前是否已经开启时间调度器,可以执行如下sql:

  show variables like 'event-scheduler';

  或者

  select @@event_scheduler;

  或者show processlist;

  二,创建时间(create event)


create event [if not exists] event_name

on schedule

[on completion[not] preserve]

[enable|disable]

[comment 'comment']

do sql_statement;

schedule:

at timestamp [+interval interval]

|every interval [starts timestamp][ends timestamp]

interval:

quantity{year|quarter|month|day|hour|minute|

week|second|year_month|day_hour|day_minute|

day_second|hour_minute|hour_second|minute_second}

1)首先来看一个简单的例子来演示每秒插入一条记录到数据表:

  use test

  create table aaa(timeline timestamp);

  create event e_test_insert

  on schedule every 1 second

  do insert into test.aaa values(current_timestamp);

  等待三秒,再执行查询看看:

  mysql>select * from test.aaa;

  就可以看到有三条数据存在

  2)5天后清空aaa表:

  create event e_test

  on schedule at current_timestamp+interval 5 day

  do truncate table test.aaa;

  3)2007年7月20日12点整清空aaa表:

  create event e_test

  on schedule at timestamp '2007-07-20 12:00:00'

  do truncate table test.aaa;

  4)每天定时清空aaa表:---执行之后,是指每天当前创建时间执行该event

  create event e_test

  on schedule every 1 day

  do truncate table test.aaa;

  5)5天后开启每天定时清空aaa表:

  create event e_test

  on schedule every 1 day

  starts current_timestamp +interval 5 day

  do truncate table test.aaa;

  6)每天定时清空aaa表,5天后停止执行:

  create event e_test

  on schedule every 1 day

  ends current_timestamp + interval 5 day

  do truncate table test.aaa;

  7)5天后开启每天定时清空aaa表,一个月后停止执行

  create event e_test

  on schedule every 1 day

  starts current_timestamp + interval 5 day

  ends current_timestamp + interval 1 month

  do truncate table test.aaa;

  三,修改事件(alter event)

  alter event event_name

  [on schedule schedule]

  [rename to new_event_name]

  [on completion [not] preserve]

  [comment 'comment']

  [enable|disable]

  [do sql_statement]

  1)临时关闭事件

  alter event e_test disable

  2)开启事件

  alter event e_test enable

  3)将每天清空aaa表修改成每5天清空一次

  alter event e_test

  on schedule every 5 day;

  四,删除事件(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

  另外当在my.ini或者my.cnf中添加了event_scheduler=1参数,那么在mysql启动之后,存在的event还是会继续运行.

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-21 11:32:01

Mysql中Event的一些测试的相关文章

mysql中event的用法详解_Mysql

一.基本概念mysql5.1版本开始引进event概念.event既"时间触发器",与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理. 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限单独使用event调用SQL语句时,

mysql中optimize表命令测试例子

今天对myiam数据表进行批量删除后,发现空间没有回收,查了资料后,发现要通过optimize table来回收空间 测试如下,建立数据表:  代码如下 复制代码 CREATE TABLE `ttext` ( `id` int(11) DEFAULT NULL, `context` text ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into ttext values( 1,'tiger1′),(2,'tiger2′),(3,'tiger3′);

MySQL中MyISAM引擎与InnoDB引擎性能简单测试

[硬件配置] CPU : AMD2500+ (1.8G) 内存: 1G/现代 硬盘: 80G/IDE [软件配置] OS : Windows XP SP2 SE : PHP5.2.1 DB : MySQL5.0.37 Web: IIS6 [MySQL表结构] CREATE TABLE `myisam` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) default NULL, `content` text, PRIMARY

MySQL中的事务和锁简单用法测试

一直以来,对于MySQL中的事务和锁的内容是浅尝辄止,没有花时间了解过,在一次看同事排查的故障中有个问题引起了我的兴趣,虽然过去了很久,但是现在简单总结一下还是有一些收获. 首先我们初始化数据,事务的隔离级别还是MySQL默认的RR,存储引擎为InnoDB > create table test(id int,name varchar(30)); > insert into test values(1,'aa'); 开启一个会话,开启事务.会话1: [test]>start transa

MySQL中的事务和锁简单测试

一直以来,对于MySQL中的事务和锁的内容是浅尝辄止,没有花时间了解过,在一次看同事排查的故障中有个问题引起了我的兴趣,虽然过去了很久,但是现在简单总结一下还是有一些收获. 首先我们初始化数据,事务的隔离级别还是MySQL默认的RR,存储引擎为InnoDB >create table test(id int,name varchar(30)); >insert into test values(1,'aa'); 开启一个会话,开启事务.会话1: [test]>start transact

MySQL中的事件调度基础学习教程_Mysql

经常需要有一些定时任务在MySQL表上执行,例如统计.迁移.删除无用数据等.之前的作法是利用Linux cron定时运行脚本,但是发现这样的额外依赖有时并不方便,例如单机多实例部署时,就需要分别手动分别配置不同的cron任务,需要额外配置相应的用户和权限:新环境部署时容易遗漏cron任务等. MySQL提供了Event Scheduler,与Linux下的crontab类似,可以根据时间调度来运行任务,运行一次或多次. 完整的Event Schduler创建语句如下: CREATE [DEFIN

如何实现MySQL中的用户管理

mysql|用户管理 MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分.本文通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统. 本文主要参考了MySQL安装所附的使用手册第六章中的部分内容. 1.授权机制的主要作用是什么? 授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和det

MySQL中如何实现类似Oracle的序列

Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的: 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长.开始索引.是否循环等:若需要迁移数据库,则对于主键这块,也是个头大的问题. 本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次. Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是:1.MySQL中新建表,用于存储序列名称和值:2.创建函数,用于获取序列表

原版MySQL中如何恢复单个InnoDB数据库表

Percona 中的 xtrabackup 真是个好工具, 简单的介绍的他的功能: 1.创建热备份(主要依靠innodb的 crash recovery 功能) 2.增量备份 3.直接对备份文件压缩打包 4.负载小 在测试最新版本2.0时,发现问题: importing  and   exporing  individual tables中这个工具对Oracle 原版的MySQL是不起作用的. 本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/ 解释