MySQL - 如何每24小时减少一次int值?

时间:2015-03-03 11:41:44

标签: php mysql

我正在使用PHP系统。在我的MySQL中有一个表borrow。内部借用borrow_status是varchar,borrow_remainint值。当用户单击“提交”按钮时。查询将运行类似

的内容
 INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3)

如何在每24小时递减borrow_remain值,然后UPDATEborrow_status递减到Finish,当它达到零时?

编辑:我还有一个book表,其中包含book_quantity,我唯一担心的是book_quantity必须在borrow_status更新为{{}时增加1}}。

4 个答案:

答案 0 :(得分:3)

您可以按照以下三个步骤实施上述方案:

1)首先,您必须启用Mysql事件调度程序。

SET GLOBAL event_scheduler = 1;

2)在mysql中创建一个可以执行借用状态更新相关功能的过程。

    delimiter //
    CREATE PROCEDURE UBS()
    BEGIN
        UPDATE borrow set borrow_remain = borrow_remain - 1 
        WHERE borrow_status='borrowing';
        UPDATE borrow SET borrow_status = 'finished'
        WHERE borrow_remain=0;

    END //
delimiter ;

3)创建一个将在24小时间隔内安排的活动。

CREATE
EVENT UBSEvent
ON SCHEDULE EVERY 24 HOUR STARTS '2015-03-04 00:00:00'
ON COMPLETION PRESERVE
ENABLE
DO
CALL UBS();

注意:

  1. UBS是程序名称。[UBS =更新借用状态(仅限a 相关缩写]
  2. 活动将于明天(2015年3月4日)上午12:00开始。
  3. 祝你有愉快的一天!

    编辑:每当借阅表中的borrow_status更新为“已完成”时,都会在book表中增加book_count。你需要一个触发器。

    假设您有一个书籍表,其中书籍的数量由book_count表示;然后,以下触发器将执行您想要的操作。

    DELIMITER $$
    CREATE TRIGGER IncBookCount AFTER UPDATE ON borrow
    FOR EACH ROW
    BEGIN
         IF NEW.borrow_status = 'finished' THEN
                UPDATE book SET book_count = book_count+1;
         END IF;
    END $$
    DELIMITER;
    

    建议: 您需要改进数据库设计。否则,您将来可能会遇到更多设计复杂架构的麻烦。保持健康!

答案 1 :(得分:1)

你看看mySQL中的事件吗?您可以创建一个事件并将其设置为按特定计划运行。这可能是你问题的门票!

答案 2 :(得分:0)

您还可以设置一个执行一段代码的cronjob来减少“borrow_remain”并相应地更新“borrow_status”。如果你的托管有cPanel,那很容易:https://documentation.cpanel.net/display/ALD/Cron+Jobs

答案 3 :(得分:0)

您需要mysql version 5.5才能使用活动。可能是您想要的活动如下:

CREATE EVENT update_borrow
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP
DO
BEGIN
UPDATE borrow SET borrow_remain = borrow_remain - 1 WHERE borrow_remain > 0;
UPDATE borrow SET borrow_status = 'FINISH' WHERE borrow_remain = 0;
END