首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL触发器导致错误1054

SQL触发器导致错误1054
EN

Stack Overflow用户
提问于 2014-04-24 23:23:41
回答 3查看 257关注 0票数 1
代码语言:javascript
复制
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次订单就能得到折扣。但是,当我们输入以下数据时

代码语言:javascript
复制
insert into order_table values(0, 1, curdate(),20140426, null , 100, 10, 0, 110);

我们得到了错误1054:字段列表中的未知列OrderCount,即使OrderCount存在于customer表中

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-25 15:07:00

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

您可能遇到的另一个问题,我从这个设计中看不出来,就是订单编号何时被更新。最好将其添加到触发器中,以便将Customer表中的订单计数与触发器一起增加,然后检查该触发器。

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

代码语言:javascript
复制
UPDATE `customer` SET `OrderCount`=OrderCount+1 WHERE `CustomerID`=NEW.CustomerID; 
票数 1
EN

Stack Overflow用户

发布于 2014-04-25 02:16:38

我使用甲骨文,它是完全不同的,但阅读您的触发器我建议您,将4查询重写为2,这样您就可以避免阅读每个表两次。

* .:

代码语言:javascript
复制
.:
 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;

*::

票数 0
EN

Stack Overflow用户

发布于 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中得到了修正,但我还没有对其进行测试。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23281608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档