sql—如何通过触发器减少另一个表中的值(mysql数据库)

rdrgkggo  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(265)

当一个新行被添加到“租用设备日志”中,其中date\u returned的值为null时,我希望触发器将“数量”表中的数量减少1。
数据库的基本概要是有一个带列的设备表;型号、制造商、型号和数量(e、 g.1001,“Jackson”,“桨”,10)
表\u equipment \u log包含以下列:;成员id、型号、类型、获取日期、返回日期(e、 g.172256631001,oar,2018-11-26,2018-11-27)
因此,当一个成员取出一件设备但尚未归还时(date\u returned为空),同一型号的数量在表equipment中递减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服务器版本相对应的手册,以获得使用near'end if的正确语法;在第9行结束

vd2z7a6w

vd2z7a6w1#

我不知道你为什么会在那里出错。但你的问题比必要的更复杂:

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_returned 应该是 new.date_returned 或者 e.date_returned . 我甚至不明白那种情况。我会期待的 e.equipment > 0 .

相关问题