[英]MySQL update after insert trigger
I am new to triggers but have coded this one 我是触发器的新手,但是已经编码了这一
DELIMITER $$
CREATE TRIGGER stockupdate
AFTER INSERT ON inventory.orderdetails
FOR EACH ROW
BEGIN
UPDATE inventory.stockitem s
INNER JOIN inventory.OrderDetails d ON s.ID = d.Item
INNER JOIN inventory.orders o ON ebayOrderNumber = d.OrderNumber
SET s.`Sold Date` = o.`Order Date`, s.EbayOrderNumber = o.ebayOrderNumber, s.`Sale Price` = d.Price
WHERE s.ID = d.Item;
END$$
DELIMITER ;
Currently it does not update table stockitem as expected. 当前,它不按预期更新表库存。 Is there anything glaringly obvious that I have done wrong please?
请问有什么明显的事情我做错了吗?
Many thanks for looking. 非常感谢您的光临。
That's because your join returns all or most records from oderDetails and oders table and you are not supressing sql_safe_updates
safety feature. 这是因为您的联接从oderDetails和oders表返回了全部或大多数记录,并且您没有
sql_safe_updates
安全功能。
You are definitely missing table alias in o ON ??.ebayOrderNumber = d.OrderNumber
. 您肯定在
o ON ??.ebayOrderNumber = d.OrderNumber
缺少表别名o ON ??.ebayOrderNumber = d.OrderNumber
。 Besides, WHERE s.ID = d.Item;
此外,
WHERE s.ID = d.Item;
is redundant as your table joins already do that. 是多余的,因为您的表联接已经做到了。 Your Where condition should be more explicit and tell which stock item to update.
您的Where条件应该更明确,并告诉您要更新的库存项目。
DELIMITER $$
CREATE TRIGGER stockupdate AFTER INSERT ON inventory.orderdetails FOR EACH ROW
BEGIN
UPDATE
(inventory.stockitem s
INNER JOIN inventory.OrderDetails d ON s.ID = d.Item)
INNER JOIN inventory.orders o ON o.ebayOrderNumber = d.OrderNumber
SET
s.`Sold Date` = o.`Order Date`, -- update the stock
s.EbayOrderNumber = o.ebayOrderNumber,
s.`Sale Price` = d.Price
WHERE
d.orederNumber = NEW.OrderNumber, -- From this order
d.Item = NEW.item; -- and this item id
END$$
DELIMITER ;
Having said that, I do not understand why would you want to update the stock table with a sold price? 话虽如此,我不明白您为什么要用售价更新库存表?
orderDetails
already contains those for you and what if you have many quantity for a single stock? orderDetails
已经包含了适合您的那些,如果您的单个库存有很多数量该怎么办? ie 100 Dell laptops. 即100台戴尔笔记本电脑。 Surely you don't have 100 records for each Dell laptop in your stock item?
您确定库存物品中的每台戴尔笔记本电脑都没有100条记录吗? and updating each record with sold price?
并用售价更新每条记录? Anyway i leave that up to you..
无论如何,我留给你..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.