如何在 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 中创建调度程序,但调度程序在我的计算机中按日期触发的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 中创建电子邮件调度程序功能

如何在 asp.net MVC 中创建定时调度程序?

如何在目标 c 中创建调度队列? [复制]

Python 使用任务调度程序自动登录 Windows

如何在 Swift 3 中创建调度队列

使用应用程序上下文播放 2.4.x Akka 调度程序