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;上面是我为一家干洗店编写的数据库的触发器。扳机被认为是为了让每个在干洗店有会员资格的顾客每10次订单就能得到折扣。但是,当我们输入以下数据时
insert into order_table values(0, 1, curdate(),20140426, null , 100, 10, 0, 110);我们得到了错误1054:字段列表中的未知列OrderCount,即使OrderCount存在于customer表中
发布于 2014-04-25 15:07:00
首先,错误消息来自于在if块中使用OrderCount。您应该使用声明的变量并将此值读入OrderNum。
您可能遇到的另一个问题,我从这个设计中看不出来,就是订单编号何时被更新。最好将其添加到触发器中,以便将Customer表中的订单计数与触发器一起增加,然后检查该触发器。
我刚刚将这一行添加到触发器中(在变量声明之后):
UPDATE `customer` SET `OrderCount`=OrderCount+1 WHERE `CustomerID`=NEW.CustomerID; 发布于 2014-04-25 02:16:38
我使用甲骨文,它是完全不同的,但阅读您的触发器我建议您,将4查询重写为2,这样您就可以避免阅读每个表两次。
* .:
.:
SELECT OrderCount, Member
INTO OrderNum, Membership
FROM Customer
WHERE CustomerID = NEW.CustomerID;
SELECT Discount, Price
INTO Disc, Cost
FROM Order_Table
WHERE OrderID = NEW.OrderID;*::
发布于 2014-10-01 23:45:37
当您引用另一个被截断的表: MySQL 5.6.17时,触发器上有一个错误:http://bugs.mysql.com/bug.php?id=72446
也许这就是原因?我试图通过将截断table_name更改为从table_name中删除来解决这一问题。(此外,bug报告似乎表明,这在MySQL 5.6.19中得到了修正,但我还没有对其进行测试。)
https://stackoverflow.com/questions/23281608
复制相似问题