为什么80%的码农都做不了架构师?>>>   

由于项目需要创建定时器(evevt),所以就百度了一下,发现基本都是来源于一个模板,有些功能还不全,现在自己总结一下。

注:mysql版本是从5.1开始才支持event的。如果你的版本低于5.1就先升级版本吧。

查看版本的方法有很多,这里只给大家提供一个    select version();

1.查看是否开启evevt与开启evevt。

1.1、MySQL evevt功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的。

              show VARIABLES LIKE '%sche%';

1.2、开启evevt功能

            SET GLOBAL event_scheduler = 1;

2.创建定时器的过程

2.1、创建测试表test
drop table if exists test;
create table test
(
id int(11) not null auto_increment primary key,
time datetime not null
) engine=innodb default charset=utf8;

2.2、创建evevt要调用的存储过程test_proce
delimiter //
drop procedure if exists test_proce//
create procedure test_proce()
begin
insert into test(time) values(now());
end//
delimiter ;

2.3、开启evevt(要使定时起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1)
执行show variables like 'event_scheduler';查看evevt是否开启;
若没开启执行set global event_scheduler='on';

2.4、创建事件test_event(其作用:每隔一秒自动调用test_proce()存储过程)
drop event if exists test_event;
create event test_event
on schedule every 1 second
on completion preserve disable
do call test_proce();
2.5、开启事件test_event
alter event test_event on completion preserve enable;
2.6、关闭事件test_event
alter event test_event on completion preserve disable;
2.7、查看表test
select * from test;

3.查看自己创建的event

如果要查看更加详细的信息,你需要root用户的授权,如果是你自己的数据库你可以用下面语句查看

select * from  mysql.event;

下面的我的evevt的查看结果

4.event的时间设置

设置event很简单,但是麻烦的是如何设置执行的时间,网上找了一些,自己总结了一下。

先看语句,如下面这个

     CREATE EVENT test_event ON SCHEDULE EVERY 1 DAY STARTS '2012-09-24 00:00:00'

     ON COMPLETION PRESERVE ENABLE DO CALL test_procedure();

EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year 

从2013年1月13号0点开始,每天运行一次

ON SCHEDULE EVERY 1 DAY STARTS '2013-01-13 00:00:00'

从现在开始每隔九天定时执行

ON SCHEDULE EVERY 9 DAY STARTS NOW() ;

每个月的一号凌晨1 点执行

on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);

每个季度一号的凌晨1点执行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);

每年1月1号凌晨1点执行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);

其他的 就大家自由组合了。。

附录

1>使用权限

单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。

当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。

查看EVENT命令有如下几种:

(1)查询mysql.event表;

(2)通过SHOW EVENTS命令;

(3)通过SHOW FULL EVENTS命令;

(4)通过查询information_schema.events表

(5)SHOW CREATE EVENT。

总之,event的使用频率较低建议使用root用户进行创建和维护。

2>CREATE EVENT 的语法

CREATE EVENT

[IF NOT EXISTS] ------------------------------------------------*标注1

event_name -----------------------------------------------------*标注2

ON SCHEDULE schedule -------------------------------------------*标注3

[ON COMPLETION [NOT] PRESERVE] ---------------------------------*标注4

[ENABLE | DISABLE] ---------------------------------------------*标注5

[COMMENT 'comment'] --------------------------------------------*标注6

DO sql_statement ;----------------------------------------------*标注7

说明:

标注1:[IF NOT EXISTS]

使用IF NOT EXISTS,只有在同名event不存在时才创建,否则忽略。建议不使用以保证event创建成功。

标注2:event_name

名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。

使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。

为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:

动作名称_(INTO/FROM_)  表名_TIME,例如:

1.每月创建(清空/删除)fans表:

create(truncate/drop)_table_fans_month;

2.每天从fans表插入(删除)数据:

insert(delete)_into(from)_fans_day;

标注3:ON SCHEDULE

ON SCHEDULE 计划任务,有两种设定计划任务的方式:

1. AT 时间戳,用来完成单次的计划任务。

2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式.

时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

提示: 其他的时间单位也是合法的如:

QUARTER, WEEK,YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND

不建议使用上一行这些不标准的时间单位。

标注4: [ON COMPLETION [NOT] PRESERVE]

ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

标注5:[ENABLE | DISABLE]

参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

可以用如下命令关闭或开启事件:

ALTER EVENT event_name  ENABLE/DISABLE

标注6:[COMMENT 'comment']

注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。

'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。

标注7: DO sql_statement

DO sql_statement字段表示该event需要执行的SQL语句或存储过程。

这里的SQL语句可以是复合语句,例如:

BEGIN

CREATE TABLE test1;//创建表(需要测试一下)

DROP TABLE test2;//删除表

CALL proc_test1();//调用存储过程

END

使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:

LOCK TABLES

UNLOCK TABLES

CREATE EVEN

ALTER EVENT

LOAD DATA

3>执行逻辑

For (已建立事件each event that has been created)

If (事件的状态非DISABLE)

And (当前时间在ENDS时间之前)

And (当前时间在STARTS时间之后)

And (在上次执行后经过的时间)

And (没有被执行)

Then:

建立一个新的线程

传递事件的SQL语句给新的线程

(该线程在执行完毕后会自动关闭)

4>修改事件

使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:

ALTER EVENT   event_name

ON SCHEDULE schedule

[RENAME TO new_event_name]

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement;

5>删除事件

EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:

DROP EVENT  [IF EXISTS]  event_name;

但当一个事件正在运行中时,删除该事件不会导致事件停止,事件会执行到完毕为止。使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。

show procedure status;

MYSQL中存储过程的创建,调用及语法

(2011-12-01 16:19:46)

转载

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。

第一部分:创建一个简单的无参的存储过程

1 用mysql客户端登入

2 选择数据库

mysql>use test;

3 查询当前数据库有哪些存储过程

mysql>show procedure status where Db='test';
4 创建一个简单的存储过程
mysql>create procedure hi() select 'hello';
5 存储过程创建完毕,看怎么调用它
mysql>call hi();
  显示结果
  mysql> call hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)
6 一个简单的储存过程就成功了,这只是一个演示,存储过程可以一次执行多个sql语句第二部分:创建一个有两个参数的存储过程一、MySQL 创建存储过程 “pr_add” 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 “a”、“b”,返回这两个参数的和。
drop procedure if exists pr_add;-- 计算两个数之和create procedure pr_add(a int,b int)
begin
   declare c int;if a is null thenset a = 0;end if;if b is null thenset b = 0;end if;set c = a + b;select c as sum;
   end;
二、调用 MySQL 存储过程 call pr_add(10, 20);
执行 MySQL 存储过程,存储过程参数为 MySQL 用户变量。 set @a = 10;set @b = 20;call pr_add(@a, @b);三、MySQL 存储过程特点 创建 MySQL 存储过程的简单语法为: create procedure 存储过程名字()([in|out|inout] 参数 datatype
)beginMySQL 语句;end;MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。 1. MySQL 存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()”
2. MySQL 存储过程参数,不能在参数名称前加“@”,如:“@a int”。下面的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不需要在变量名字前加“@”,虽然 MySQL 客户端用户变量要加个“@”。
create procedure pr_add(@a int,  -- 错误b int    -- 正确)3. MySQL 存储过程的参数不能指定默认值。 4. MySQL 存储过程不需要在 procedure body 前面加 “as”。而 SQL Server 存储过程必须加 “as” 关键字。 create procedure pr_add(a int,b int)as              -- 错误,MySQL 不需要 “as”beginmysql statement ...;end;5. 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。 create procedure pr_add(a int,b int)beginmysql statement 1 ...;mysql statement 2 ...;end;6. MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
   ...declare c int;if a is null thenset a = 0;end if;...end;7. MySQL 存储过程中的注释。 declare c int;     -- 这是单行 MySQL 注释 (注意 -- 后至少要有一个空格)if a is null then  # 这也是个单行 MySQL 注释set a = 0;end if;...end;8. 不能在 MySQL 存储过程中使用 “return” 关键字。
   set c = a + b;select c as sum;end;9. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()” call pr_no_param();
10. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。 call pr_add(10, null);

转载于:https://my.oschina.net/lwaif/blog/821853

mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间相关推荐

  1. android h5app息屏定时器,H5案例分享:JS设置定时器和清除定时器

    JS设置定时器和清除定时器 在做项目中难免会碰到需要实时刷新,动画依次出现等等需求,这时候就需要定时器登上我们的代码舞台了,所以今天我们就先来了解一下JS定时器的设置和清除吧. 一.启用定时器 win ...

  2. zookeeper创建TTL的节点,给节点设置过期时间

    用redis做分布式锁,大部分场景都是设置一个 过期时间的. 今天看代码发现,有用到zookeeper的场景. 我就在想,zookeeper有没有,设置过期时间的操作 一番百度,操作如下 zookee ...

  3. 怎样打开mysql进程数_mysql查看最大打开进程数

    今天在群里刚刚知道这个查看打开最大进程数的命令,下面来看一下吧~ cat /proc/27095/limits | grep Max open files 查看mysql最大打开进程数的命令 我们应该 ...

  4. mysql 创建函数_MySQL文件及目录权限设置分析-爱可生

    1 背景 创建文件及目录时,我们会对相关的权限有一定的要求,默认的可以通过系统的umask来控制.然而,在我们使用MySQL时,无论是开始使用前的初始化,还是MySQL实例启动后,创建的相关文件及目录 ...

  5. html清空计时器,js设置定时器和清除定时器

    一.前言 在前端,我们有很多功能需要用到定时器.譬如轮询,譬如定时关闭弹框,譬如实现秒表,譬如一段时间后跳转页面等等.因此,我们需要掌握定时器的用法. 二.设置定时器 目前window对象提供有两个方 ...

  6. JS设置定时器和清除定时器

    最近在项目中频繁运用到js定时器,现在和大家分享一下方法.在前端开发的过程中,有些时候需要某段程序等待一段时间后再开始执行,在JavaScript中主要通过定时器实现这一类需求. JS的两种定时器 w ...

  7. mysql创建表的时候日期给个默认值_mysql 创建表时 日期字段默认值为当前时间...

    mysql 创建表时 日期字段默认值为当前时间 mysql version 5.1 在mysql创建表的时候经常会遇到创建日期字段需要设置当前时间为默认值的时候,就如sqlserver2000一样,把 ...

  8. mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间

    1.查看是否开启evevt与开启evevt. 1.1.MySQL evevt功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的. show VARIABLES ...

  9. mysql schedule event,MySQL 定时器event

    记录一下MySQL定时器常用的几条语句 1:查看定时器是否开启 SHOW VARIABLES LIKE '%sche%' ; 2:打开定时器 SET GLOBAL event_scheduler = ...

最新文章

  1. python请用自定义函数实现账号密码的输入_Python实现控制台输入密码的方法
  2. 【机器学习基础】说模型过拟合的时候,说的是什么?
  3. python面向对象语言_Python语言基础之——面向对象编程
  4. linux python2.7 scipy_scipy.sparse.linalg.sp为Linux系统上的大型稀疏矩阵解决了令人惊讶的行为...
  5. ubuntu 20.04 快速开启TCP BBR实现高效单边加速
  6. 设计模式学习笔记(目录篇)
  7. Linux内存实际使用率
  8. 自定义 Behavior - 仿新浪微博发现页的实现
  9. 利用linux打造工科男的办公娱乐利器 ——以centos为例
  10. android rom root权限,教你刷机包获取ROOT权限的方法
  11. 你来比划我来猜 绿色游戏猜词小软件
  12. 子网掩码和IP地址计算网络地址和广播地址的换算
  13. git提交代码至码云
  14. ARM版本的IAR的下载和安装
  15. Python小项目(学生成绩管理系统)7.排序、显示部分
  16. elf 变异upx 脱壳
  17. token登录最详细代码实例
  18. 表贴电阻尺寸与什么有关_电阻尺寸对照表
  19. UE4--材质地形篇——地形材质的运用(混合材质)
  20. 错误: 找不到符号 符号: 方法 getResources() 位置: 类型为String的变量 dataSex

热门文章

  1. linux ftp日志_linux学习笔记(一)——Linux分区和目录结构
  2. 北京中信银行总行地址_中信银行拉萨分行举行“存款保险标识”启用和存款保险条例宣传活动...
  3. 远控免杀专题(20)-GreatSCT免杀
  4. 单片机涡轮流量传感器_关于涡轮流量计传感器的维护保养
  5. 易语言 java支持_开源Java客户端可以连接易语言服务器
  6. dapperpoco mysql_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
  7. linux网络编程之通信协议格式
  8. C++ 读取windows服务列表 与操作注册表
  9. mkfs.jffs2参数详解
  10. 计算机网络【0】概述