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

标签 mysql sql syntax triggers

当新行添加到“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/

相关文章:

SQL LIKE 运算符不适用于逗号分隔列表

sql - 具有多个查询和不同选定列的存储函数

syntax - prolog,非常简单的dcg语法

java - 反编译后的一些语法问题

mysql - 从一种方法调用另一种方法

java - HSQL连接异常,连接不存在

mysql - 匹配一列多个值的sql查询

scala - Scala 中的多行包声明

php MySql 连接错误

javascript - Selenium 、 Mocha 、MySQL。 mysql运行顺序