【发布时间】:2022-11-17 19:13:02
【问题描述】:
我是 MySQL 的新手,正在学习触发器。我有 2 个我想要的表:当插入一个表(detail_transaction)时,另一个表(项目)的“库存”字段发生变化。
- '项目'表
| id | name | price | stock |
|---|---|---|---|
| 1 | Item_A | 15 | 900 |
| 2 | Item_B | 9 | 500 |
- 'detail_transaction' 表
| id | id_item | count | total_price |
|---|---|---|---|
| 1 | 1 | 5 | 75 |
如果我在“detail_transaction”表中插入新行,我希望“item”表中具有相同“id”的“stock”字段减少并调整为“detail_transaction”的“count”。例如 : 我在“detail_transaction”表中插入新行:
| id | id_item | count | total_price |
|---|---|---|---|
| 2 | 1 | 10 | 150 |
我想将“项目”表更新为:
| id | name | price | stock |
|---|---|---|---|
| 1 | Item_A | 15 | 890 |
| 2 | Item_B | 9 | 500 |
我创建了一个触发器来尝试实现我的目的,但是当我尝试在“detail_transaction”中插入新行时,出现了这个错误:无法更新存储函数/触发器中的“项目”表,因为它已被调用此存储函数/触发器的语句使用.
我的触发器:
DELIMITER $$
CREATE TRIGGER update_stock
AFTER INSERT
ON detail_transaction
FOR EACH ROW
BEGIN
UPDATE item
JOIN detail_transaction ON detail_transaction.id_item = item.id
SET stock = stock - NEW.count
WHERE item.id = NEW.id_item;
END$$
DELIMITER ;
然后,我将行插入 detail_transaction 表:
INSERT INTO detail_transaction (id, id_item, count, total_price)
VALUES (2, 1, 10, (SELECT price FROM item WHERE item.ID = 1) * 10);
但是我得到了错误。我能做些什么来解决这个问题?是因为我尝试插入时的 SELECT 部分吗?感谢您的回答。
【问题讨论】: