创建触发器时,我总是收到错误消息

时间:2019-09-15 04:15:08

标签: mysql sql

创建触发器时,我总是出错。

 CREATE TRIGGER ORDER_BILL_TRIG AFTER
    INSERT ON ORDER_BILL
    FOR EACH ROW MODE DB2SQL
    [REFERENCING NEW AS N]
    UPDATE ORDER_BILL
    SET ORDER_BILL = QUANTITY * (SELECT FOOD_PRICE FROM FOOD WHERE
    FOOD_PRICE = N.FOOD_NUM) WHERE N.FOOD_NUM = FOOD_NUM;

错误是:

  

错误1064(42000):您的SQL语法有错误;检查   与您的MySQL服务器版本相对应的手册   'DB2SQL [REFERENCING NEW AS N] UPDATE ORDER_BILL附近使用的语法   SET ORDER_BILL = QUANTITY *(第3行的SEL'

我不知道如何解决

2 个答案:

答案 0 :(得分:0)

您可以尝试在MySQL中使用以下代码-

CREATE TRIGGER ORDER_BILL_TRIG
AFTER
INSERT ON ORDER_BILL
FOR EACH ROW
BEGIN
  UPDATE ORDER_BILL
  SET ORDER_BILL = QUANTITY * (SELECT FOOD_PRICE
                               FROM FOOD
                               WHERE FOOD_PRICE = NEW.FOOD_NUM)
  WHERE NEW.FOOD_NUM = FOOD_NUM;
END;

答案 1 :(得分:0)

正如P.Salmon和Joakim Danielson所评论的那样,触发器代码存在各种问题:

    MySQL不支持
  • REFERENCING
  • AFTER触发器无法操作与其绑定的表
  • mode DB2SQL在MySQL中没有意义

我对您的用例的理解是,每次插入新账单时,您都想根据已开票数量和产品价格(可以在{{1}中找到)自动设置账单价格}表。

一种解决方案是在执行插入操作之前使用food触发器设置票据价格。

这里是 DB Fiddle demo 和分步说明。

1)考虑表BEFORE INSERTorder_bill的以下表结构:

food

2)create table order_bill ( bill_num int primary key auto_increment, food_num int, quantity int, bill_price int ); create table food ( food_num int primary key, food_price int ); 表包含一条记录,该记录为food 1定义了价格10:

food_num

3)我们将触发器定义如下:

| food_num | food_price |
| -------- | ---------- |
| 1        | 10         |

4)现在,我们在CREATE TRIGGER order_bill_trig BEFORE INSERT ON order_bill FOR EACH ROW SET NEW.bill_price = ( SELECT food_price FROM food WHERE food_num = NEW.food_num ) * NEW.quantity ; 表中插入一条新记录,数量为order_bill 1:10:

food_num

5)触发器触发,并将INSERT INTO order_bill(food_num, quantity) VALUES(1, 5); 设置为(bill_price)。 5 * 10 = 50的内容现在如下:

order_bill