mysql 实现每月更新一次的触发器问题

mysql 实现每月更新一次的触发器问题,第1张

1、触发器是update后激发的,我想你需要的是mysql计划任务。

2、计划任务状态

show variables like '%event%'

3、使用下列的任意一句开启计划任务:

SET GLOBAL event_scheduler = ON

SET @@global.event_scheduler = ON

SET GLOBAL event_scheduler = 1 -- 0代表关闭

SET @@global.event_scheduler = 1

4、创建event语法

help create event

5、实例

实例0:

每5分钟删除sms表上面ybmid为空白且createdate距现时间超过5分钟的数据。

USE test

CREATE EVENT event_delnull

ON SCHEDULE

EVERY 5 MINUTE STARTS '2012-01-01 00:00:00' ENDS '2012-12-31 00:00:00'

DO

DELETE FROM sms WHERE ybmid='' AND TIMEDIFF(SYSDATE(),createdate)>'00:05:00'

实例1:

每天调用存储过程一次:

mysql>delimiter //

mysql>create event updatePTOonSunday

->on schedule every 1 day

->do

->call updatePTO()

->//

Query OK, 0 rows affected (0.02 sec)

这里updatePTO()是数据库里自定义的存储过程

6、查看任务计划:

SELECT * FROM mysql.event\G

BEGIN与END之间的“执行语句列表”参数表示需要执行的多个执行语句的内容。不同的执行语句之间用分号隔开。

注意:

一般情况下,MySQL默认是以“”作为结束执行语句。在创建触发器过程中需要用到“”。为了解决这个问题,可以用DELIMITER语句。如“DELIMITER

&&”,可以将结束符号变成“&&”。当触发器创建完成后,可以用命令“DELIMITER

”来将结束符号变成“”。

实例

创建一个由DELETE触发多个执行语句的触发器dept_trig2。

1. 创建dept_trig2触发器的SQL代码如下:

DELIMITER &&

CREATE TRIGGER dept_trig2 AFTER DELETE

ON department FOR EACH ROW

BEGIN

INSERT INTO trigger_time VALUES('22:30:30')

INSERT INTO trigger_time VALUES('23:50:50')

END

&&

DELIMITER

在DOS提示符窗口中查看创建dept_trig2触发器的 *** 作效果。如下图所示:

上图中代码执行的结果显示,触发器创建成功。

2. 在department表中执行DELETE *** 作。如下图所示:

上图中代码执行的结果显示,删除 *** 作执行成功。

3. 在department表中执行DELETE *** 作以后,trigger_time表中将会自动插入两条记录。

首先mysql 只支持3种触发器

1 DELETE2 INSERT 3 UPDATE

其他的MySQL语句不支持触发器,所以你第二个需求不能用触发器实现。

其次是 非常遗憾,MYSQL中触发器中不能对本表进行 insert ,update ,delete *** 作,以免递归循环触发。所以你第一个需求不能在insert前删除本表数据

对于update 能用set 进行 *** 作替换,insert与delete只能借助第二张表才能实现需要的目的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7230709.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存