事件
事件调度器简称事件,是定时触发执行的,是由一个特定的线程来管理的
事先准备,连接指定数据库
import pymysql
db = pymysql.connect('localhost','root','111','library')
cursor = db.cursor()
一、查看事件是否开启
首先需要指定一个数据库,否则会报错Error 2006(HY000)错误
首先查看
sql = "show variables like 'event_scheduler';"
cursor.execute(sql)
result = cursor.fetchall()
print(result)
由于value的值为off,所以事件没有开启
再次查看@@event_scheduler变量的值
sql1 = "select @@event_scheduler;"
cursor.execute(sql1)
result = cursor.fetchall()
print(result)
最后查看processlist
sql2 = "show processlist;"
cursor.execute(sql2)
result = cursor.fetchall()
print(result)
由于在processlist表中没有查到event_scheduler的信息,说明事件没有开启;
如果参数event_scheduler的值为on,或者在processlist表中查询到了event_scheduler的信息,则说明事件已经开启。
二、开启事件
①通过设置全局参数修改
# set global可以开启或关闭事件
sql3 = "set global event_scheduler = ON;"
sql = "show variables like 'event_scheduler';"
cursor.execute(sql3)
cursor.execute(sql)
result = cursor.fetchall()
print(result)
此操作只是占时的开启事件,如果想始终开启,可以更改配置文件。
②更改配置文件
在my.ini/my.cnf中添加event_scheduler=on,重启MySQL服务器才生效
三、创建事件
create
[definer = {user | current_user }]
EVENT [if not exists ] event_name
on SCHEDULE schedule
[on completion [not] preserve]
[enable | disable |disable on slave]
[comment ‘comment’]
do event_body;
on SCHEDULE子句中,参数schedule的值为一个as子句,用于指定事件在某个时刻发生
at timestamp [+ INTERVAL interval]…
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] …]
[ENDS timestamp [+ INTERVAL interval] … ]
timestamp:表示一个具体的时间点,后面加上一个时间间隔,表示在这个时间间隔后事件发生
EVERY子句:表示事件在指定时间区域间每隔多长时间发生一次,start指定开始时间,end指定结束时间
interval:从现在开始的时间,其值由一个数值和单位构成
interval参数值
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
# 在当前数据库中创建一个名为e_test的事件,每隔5秒向数据表user中插入数据
# 由于在连接服务器的时候指定了数据库,这里就不再打开数据库
sql = "create table tb_eventtest(\
id int(11) primary key auto_increment not null,\
createtime varchar(30) not null, \
user varchar(25) not null);"
cursor.execute(sql)
# 创建一个tb_eventtest基本表,向该表中每5秒插入一条数据
sql4 = "create event if not exists e1_test on schedule every 5 second\
on completion preserve \
do insert into tb_eventtest(user,createtime)\
values('xiao',now());"
cursor.execute(sql4)
sql5 = "select * from tb_eventtest;"
cursor.execute(sql5)
四、修改事件
create
[definer = {user | current_user }]
EVENT event_name
[on SCHEDULE schedule]
[on completion [not] preserve]
[rename to new_event_name]
[enable | disable |disable on slave]
[comment ‘comment’]
[do event_body]
alter event可以让一个时间关闭或再次让其活动
# 修改事件e1_event
sql = "alter event e1_test on schedule every 30 second\
on completion preserve \
do insert into tb_eventtest(user,createtime) \
values('xuan',now());"
cursor.execute(sql)
sql1 = "select * from tb_eventtest;"
cursor.execute(sql1)
临时关闭事件
临时关闭事件
sql = “alter event e1_test disable;”
cursor.execute(sql)
sql1 = “select * from tb_eventtest;”
cursor.execute(sql1)
即关闭事件后,不再继续向数据表tb_eventtest中插入数据。
五、删除事件
# 删除事件
sql = "drop event if exists e_test;"
cursor.execute(sql)