【问题标题】:How to create scheduler in Mysql, but the scheduler triggered by date in my computer如何在 Mysql 中创建调度程序,但调度程序在我的计算机中按日期触发
【发布时间】: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'。

【问题讨论】:

  • 您的入住日期为空?

标签: mysql


【解决方案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;
          结束$$
      分隔符;
      

      如有错误请指正

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-03
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多