为了账号安全,请及时绑定邮箱和手机立即绑定

插入触发器后的mysql,该触发器更新另一个表的列

插入触发器后的mysql,该触发器更新另一个表的列

德玛西亚99 2019-12-02 13:10:08
我正在尝试编写触发器,我有下表:BookingRequest:  +-----------+---------+------+-----+---------+----------------+    | Field     | Type    | Null | Key | Default | Extra          |    +-----------+---------+------+-----+---------+----------------+    | idRequest | int(11) | NO   | PRI | NULL    | auto_increment |    | roomClass | int(11) | NO   |     | NULL    |                |    | inDate    | date    | NO   |     | NULL    |                |    | outDate   | date    | NO   |     | NULL    |                |    | numOfBeds | int(11) | NO   |     | NULL    |                |    | status    | int(11) | NO   | MUL | NULL    |                |    | idUser    | int(11) | NO   | MUL | NULL    |                |    +-----------+---------+------+-----+---------+----------------+状态表:+------------+--------------------------------------------------+------+-----+---------+-------+| Field      | Type                                             | Null | Key | Default | Extra |+------------+--------------------------------------------------+------+-----+---------+-------+| idStatus   | int(11)                                          | NO   | PRI | NULL    |       || nameStatus | enum('underConsideration','approved','rejected') | YES  |     | NULL    |       |+------------+--------------------------------------------------+------+-----+---------+-------+我需要一个触发器,如果将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作create trigger occupy_trig after insert on OccupiedRoom for each rowbegin  if BookingRequest.idRequest= NEW.idRequest   then       update BookingRequest       set status = '1';       where idRequest = NEW.idRequest;    end if;END;而且它不起作用,所以任何建议都非常有用
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

尝试这个:


DELIMITER $$

CREATE TRIGGER occupy_trig

AFTER INSERT ON `OccupiedRoom` FOR EACH ROW

begin

       DECLARE id_exists Boolean;

       -- Check BookingRequest table

       SELECT 1

       INTO @id_exists

       FROM BookingRequest

       WHERE BookingRequest.idRequest= NEW.idRequest;


       IF @id_exists = 1

       THEN

           UPDATE BookingRequest

           SET status = '1'

           WHERE idRequest = NEW.idRequest;

        END IF;

END;

$$

DELIMITER ;


查看完整回答
反对 回复 2019-12-02
?
噜噜哒

TA贡献1784条经验 获得超7个赞

有了您的需求,您就不需要了BEGIN END,IF而不必要SELECT的触发了。所以你可以简化为


CREATE TRIGGER occupy_trig AFTER INSERT ON occupiedroom 

FOR EACH ROW

  UPDATE BookingRequest

     SET status = 1

   WHERE idRequest = NEW.idRequest;


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 1056 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信