目录
1、创建测试表和添加数据
2、创建函数
3、调用函数执行方式
3.1?直接调用函数
3.2?创建事件定时执行
3.3?开启定时任务
3.4?开启或者关闭定时任务
3.5?执行后的数据如下
1、创建测试表和添加数据
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for expire_time_data
-- ----------------------------
DROP TABLE IF EXISTS `expire_time_data`;
CREATE TABLE `expire_time_data` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '名称',
`expire_time` datetime(0) NULL DEFAULT NULL COMMENT '过期时间',
`status` int(3) NULL DEFAULT NULL COMMENT '状态:0-有效期,1-无效期',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of expire_time_data
-- ----------------------------
INSERT INTO `expire_time_data` VALUES (1, '第一条数据', '2022-07-14 10:01:32', 1, '2022-07-14 10:26:10');
INSERT INTO `expire_time_data` VALUES (2, '第二条数据', '2022-07-14 10:01:47', 1, '2022-07-14 10:26:10');
INSERT INTO `expire_time_data` VALUES (3, '第三条数据', '2022-07-15 10:04:54', 0, NULL);
SET FOREIGN_KEY_CHECKS = 1;
2、创建函数
CREATE PROCEDURE update_status ( )
BEGIN
UPDATE `test`.`expire_time_data`
SET `status` = 1,
update_time = now( )
WHERE
`status` = 0
AND UNIX_TIMESTAMP( expire_time ) < UNIX_TIMESTAMP( now( ) );
END;
说明:我饿业务是判断过期时间和当前时间比较,如果当前时间大于过期时间,就把status状态更新为1。
3、调用函数执行方式
3.1?直接调用函数
CALL update_status ();
3.2?创建事件定时执行
3.3?开启定时任务
-- 查看定时任务是否开启 OFF-未开启 ON-已开启
show VARIABLES like 'event%';
3.4?开启或者关闭定时任务
-- 开启定时任务 2种方式
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
-- 关闭定时任务 2种方式
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;
3.5?执行后的数据如下
??
4、直接创建事件定时执行
CREATE DEFINER = `root`@`localhost` EVENT `Untitled`
ON SCHEDULE
EVERY '10' SECOND STARTS '2022-07-14 10:35:00'
COMMENT '每10秒判断是否过期'
DO -- CAll update_status
UPDATE `test`.`expire_time_data`
SET `status` = 1,
update_time = now( )
WHERE
`status` = 0
AND UNIX_TIMESTAMP( expire_time ) < UNIX_TIMESTAMP( now( ) );
|