如何在 Mysql 中创建调度程序,但调度程序在我的计算机中按日期触发
Posted
技术标签:
【中文标题】如何在 Mysql 中创建调度程序,但调度程序在我的计算机中按日期触发【英文标题】:How to create scheduler in Mysql, but the scheduler triggered by date in my computer 【发布时间】:2019-01-05 15:50:05 【问题描述】:我有 4 张桌子
如果不存在 `b_hotel`,则创建数据库; 使用`b_hotel`; /*表`booking`的表结构*/ 如果存在“预订”,则删除表; 创建表`预订`( `booking_id` int(11) NOT NULL, `customer_id` int(11) 默认为空, `tgl_book` 日期时间 DEFAULT NULL, `checkin` 日期 DEFAULT NULL, `checkout` 日期 DEFAULT NULL, `no_kamar` int(11) 默认为空, 主键(`booking_id`), KEY `customer_id`(`customer_id`), KEY `no_kamar` (`no_kamar`), CONSTRAINT `booking_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`), 约束 `booking_ibfk_2` 外键 (`no_kamar`) 参考 `kamar` (`no_kamar`) ) 引擎=InnoDB 默认字符集=latin1; /*表`booking`的数据*/ /*表`customer`的表结构*/ 如果存在“客户”,则删除表; 创建表`客户`( `customer_id` int(11) NOT NULL, `nama_customer` varchar(50) 默认为空, `no_telp` varchar(13) 默认为空, `email` varchar(50) 默认为空, 主键(`customer_id`) ) 引擎=InnoDB 默认字符集=latin1; /*表`customer`的数据*/ 插入`customer`(`customer_id`,`nama_customer`,`no_telp`,`email`) 值 (1,'ABC','123','email@email.com'); /*表`kamar`的表结构*/ 如果存在“kamar”,则删除表; 创建表`kamar`( `no_kamar` int(11) 非空, `no_tipe` smallint(6) 默认为空, `status` enum('Kosong','Terpakai') 默认为空, `img` varchar(50) 默认为空, 主键(`no_kamar`), KEY `no_tipe` (`no_tipe`), 约束 `kamar_ibfk_1` 外键 (`no_tipe`) 参考 `tipe_kamar` (`no_tipe`) ) 引擎=InnoDB 默认字符集=latin1; /*表`kamar`的数据*/ 插入`kamar`(`no_kamar`,`no_tipe`,`status`,`img`) 值 (101,1,'Kosong','assets/img/room/standard_1.jpg'), (102,2,'Kosong','assets/img/room/standard_2.jpg'), (301,3,'Kosong','assets/img/room/deluxe_1.jpg'), (302,4,'Kosong','assets/img/room/deluxe_2.jpg'), (601,5,'Kosong','assets/img/room/executive_1.jpg'), (602,6,'Kosong','assets/img/room/executive_2.jpg'); /*表`tipe_kamar`的表结构*/ 如果存在“tipe_kamar”,则删除表; 创建表`tipe_kamar`( `no_tipe` smallint(6) NOT NULL AUTO_INCREMENT, `nama_tipe` varchar(30) 默认为 NULL, `harga` int(7) 默认为空, `dewasa` smallint(1) 默认为空, 主键(`no_tipe`) ) 引擎=InnoDB AUTO_INCREMENT=7 默认字符集=latin1; /*表`tipe_kamar`的数据*/ 插入`tipe_kamar`(`no_tipe`,`nama_tipe`,`harga`,`dewasa`) 值 (1,'标准',400000,2), (2,'标准大',800000,4), (3,'豪华',800000,2), (4,'豪华大',1600000,4), (5,'套房',1600000,2), (6,'套房大',3200000,4);
如果date in my computer
等于booking
.checkin
,我想将kamar
.status
更改为'Terpakai'。
【问题讨论】:
您的入住日期为空? 【参考方案1】:您可以使用 mysql 事件调度程序。
启用调度器
SET GLOBAL event_scheduler = ON;
创建循环事件
CREATE EVENT e_hourly
ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.'
DO
DELETE FROM site_activity.sessions;
MySQL event scheduler
【讨论】:
【参考方案2】:还是不行,我会尝试每 10 秒创建一次(所以,我不必等待太久)。 我的代码:
分隔符 $$ 创建 /*[定义者 = 用户 | CURRENT_USER ]*/ 事件`b_hotel`.`auto_checkin` 按照时间表 每 5 秒 做 开始 IF booking.checkin = DATE(NOW()) THEN 更新 kamar 加入预订 kamar.no_kamar = booking.no_kamar SET kamar.status = 'Terpakai' WHERE kamar.no_kamar = booking.no_kamar; 万一; 结束$$ 分隔符;
如有错误请指正
【讨论】:
【参考方案3】:我会尝试这样做,但工作..请纠正我。
分隔符 $$ 创建 /*[定义者 = 用户 | CURRENT_USER ]*/ 事件`b_hotel`.`auto_checkin` 按照时间表 每 5 秒 做 开始 更新 kamar 加入预订 kamar.no_kamar = booking.no_kamar SET kamar.status = "Terpakai" WHERE kamar.no_kamar = booking.no_kamar AND DATE(NOW()) = booking.checkin; 结束$$ 分隔符;
如有错误请指正
【讨论】:
以上是关于如何在 Mysql 中创建调度程序,但调度程序在我的计算机中按日期触发的主要内容,如果未能解决你的问题,请参考以下文章