我在数据库里有三张桌子:
product
( product\_id
int(11) NOT NULL,product\_name
varchar(50) NULL,product\_stock
int(11) NULL,) ENGINE=InnoDB默认CHARSET=latin1;transaction
( transaction\_id
int(11) NULL、user\_id
int(11) NULL、transaction\_date
datetime NULL、transaction\_status
ENUM(“未决”、“process”、“cancel”)非空默认值“未决”) ENGINE=InnoDB默认CHARSET=latin1;transaction\_details
( transaction\_id
int(11) NOT NULL,product\_id
int(11) NULL,qty
int(11) NULL,) ENGINE=InnoDB默认CHARSET=latin1;如果事务表中的transaction_status更改为“取消”,如何使用触发器根据transaction_details表中的qty更新产品表中的transaction_details
发布于 2019-01-30 05:17:26
这个触发器应该能做你想做的事。在UPDATE
on transaction
之后,它更新事务中所有产品的库存(通过在所有三个表上使用JOIN
来查找事务的相关产品):
CREATE TRIGGER update_stock
AFTER UPDATE ON transaction
FOR EACH ROW
BEGIN
IF NEW.transaction_status = 'cancel' THEN
UPDATE transaction t
JOIN transaction_details td ON td.transaction_id = NEW.transaction_id
JOIN product p ON p.product_id = td.product_id
SET p.product_stock = p.product_stock + td.qty;
END IF;
END
https://stackoverflow.com/questions/54433642
复制相似问题