简体   繁体   English

插入触发器后的MySQL更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM