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/