当新行添加到“rented_equipment_log”(其中 date_returned 的值为 NULL)时,我希望触发器将表“quantity”中的数量减 1。
数据库的基本概要是有一个带有列的设备表;型号、制造商、类型和数量。 (例如 1001、“ jackson ”、“桨”、10)
表rented_equipment_log有以下列:成员 ID、型号、类型、拍摄日期、返回日期。 (如17225663、1001、桨、2018-11-26、2018-11-27)
所以当成员(member)取出一件装备但尚未归还时(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 行
最佳答案
我不知道为什么你会出现错误。但您的查询比必要的更复杂:
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
。
关于mysql - 如何通过触发器减少另一个表中的值? (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481059/