如何通过触发器递减另一个表中的值? (MySQL)

时间:2018-11-26 12:23:28

标签: mysql sql syntax triggers

当将新行添加到date_returned值为NULL的“ rented_equipment_log”中时,我希望触发器在表“ quantity”中将数量减少1。

数据库的一个基本概要是,存在一个带有列的设备表;型号,制造商,类型和数量。 (例如1001,'Jackson','oar',10)

表rented_equipment_log中包含列; member_id,型号,类型,date_taken,date_returned。 (例如17225663、1001,全部,2018-11-26、2018-11-27)

因此,当成员取出一台设备但尚未归还时(date_returned为null),表设备中相同型号的数量减少1。

但是我遇到语法错误。我看过其他与此类似的问题,但仍然无法弄清错误是什么。

这是触发因素:

delimiter //
CREATE TRIGGER UpdateQuantity 
AFTER INSERT ON rented_equipment_log
FOR EACH ROW BEGIN
    DECLARE q integer;
    SELECT quantity INTO q FROM equipment WHERE model = NEW.model; 
    IF (date_returned IS NULL) THEN
    UPDATE equipment
    SET quantity = q -1 WHERE model = NEW.model
END IF;
END;//

这是错误:      #1064-您的SQL语法有误;检查手册      对应于您的MySQL服务器版本以使用正确的语法      近      '万一;      END',位于第9行

1 个答案:

答案 0 :(得分:2)

我不确定您为什么在这里遇到错误。但是您的查询比必要的要复杂:

delimiter //

CREATE TRIGGER UpdateQuantity 
AFTER INSERT ON rented_equipment_log
FOR EACH ROW
BEGIN
    UPDATE equipment e
        SET e.quantity = e.quantity - 1
        WHERE e.model = NEW.model and ?.date_returned IS NULL;
END;//

我不确定date_returnednew.date_returned还是e.date_returned。我什至不了解这种情况。我期望e.equipment > 0