当将新行添加到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行
答案 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_returned
是new.date_returned
还是e.date_returned
。我什至不了解这种情况。我期望e.equipment > 0
。