mysql - SQL 触发器导致错误 1054

标签 mysql sql triggers

delimiter //
CREATE TRIGGER Discount
BEFORE INSERT ON ORDER_TABLE
FOR EACH ROW BEGIN
    DECLARE OrderNum INT;
    DECLARE Membership BOOLEAN;
    DECLARE Disc DECIMAL(10, 2);
    DECLARE Cost DECIMAL(10, 2);

    SELECT OrderCount INTO OrderNum
    FROM Customer
    WHERE CustomerID = NEW.CustomerID;

    SELECT Member INTO Membership
    FROM Customer
    WHERE CustomerID = NEW.CustomerID;

    SELECT Discount INTO Disc
    FROM Order_Table
    WHERE OrderID = NEW.OrderID;

    SELECT Price INTO Cost
    FROM Order_Table
    WHERE OrderID = NEW.OrderID;

    IF(Membership = TRUE) THEN
        IF(MOD(OrderCount, 10) = 0) THEN
            SET NEW.Discount = Cost/2;
        END IF;
    END IF;
END//
delimiter;

以上是我为一家干洗店编写的数据库的触发器。触发器应该能够让每位在干洗店拥有成员(member)资格的顾客在每下 10 个订单时获得折扣。但是当我们输入以下数据时

insert into order_table values(0, 1, curdate(),20140426, null , 100, 10, 0, 110);

我们收到错误 1054:字段列表中的未知列 OrderCount 即使客户表中存在 OrderCount

最佳答案

首先,错误消息来自于在 if block 中使用 OrderCount。您应该使用您声明的变量并将此值读入 OrderNum。

您可能遇到的另一个问题,我无法从这个设计中看出,是更新订单号的时间。最好将它添加到触发器中,这样客户表中的订单数就会随着触发器增加一个,然后可以检查它。

我刚刚将这一行添加到触发器中(在变量声明之后):

UPDATE `customer` SET `OrderCount`=OrderCount+1 WHERE `CustomerID`=NEW.CustomerID; 

关于mysql - SQL 触发器导致错误 1054,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281608/

相关文章:

MySQL 查询 : select all the books a user has completed reviewing

mysql - SQL SELECT ORDER BY 多个列取决于其他列的值

mySQL - 多个表的外键?

mysql - 查询以替换表中的空值

mysql - 查询在终端中运行但不在 PHPMyadmin 中运行

mysql - 插入另一表的一列,而不将其他列设置为 null

php - 警告 : mysql_fetch_row() expects parameter 1 to be resource

database - 在 PostgreSQL 触发器函数中使用 pg_notify

mysql - 当前SQL语句是否有MySQL变量?

java - 使用数据库更改缓存更新