创建触发器时,我总是出错。
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'
我不知道如何解决
答案 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所评论的那样,触发器代码存在各种问题:
REFERENCING
AFTER
触发器无法操作与其绑定的表mode DB2SQL
在MySQL中没有意义我对您的用例的理解是,每次插入新账单时,您都想根据已开票数量和产品价格(可以在{{1}中找到)自动设置账单价格}表。
一种解决方案是在执行插入操作之前使用food
触发器设置票据价格。
这里是 DB Fiddle demo 和分步说明。
1)考虑表BEFORE INSERT
和order_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