MySQL 查询 - 创建一个触发器,在销售发生后更新库存水平

Posted

技术标签:

【中文标题】MySQL 查询 - 创建一个触发器,在销售发生后更新库存水平【英文标题】:MySQL Query - Create a Trigger that updates stock levels once a sale takes place 【发布时间】:2019-11-13 16:59:52 【问题描述】:

每次购买产品时,我都需要创建一个触发器来更新我的库存水平。我对 mysql 很陌生,所以任何帮助都将不胜感激,如果你能像向 5 岁的孩子解释它一样制定一个答案,那就太好了:)

我有两个似乎适合这个的表,两者的 Product_ID 是通用的;

产品(Product_ID、Category_ID、Supplier_ID、Product_Name、描述、尺寸、颜色、Cost_Price_Eur、Selling_Price_Eur、Total_Stock)

Order_Details(Order_Details_ID、Order_ID、Product_ID、Quantity_Sold)

任何约会尝试都失败了。事实上,我只是得到以下内容;

错误代码:1064。您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“on order_details”附近使用的语法

在下面最基本的代码之后;

USE Shoes_By_Sean_Online

CREATE TRIGGER Stock_Update on order_details

再次感谢任何帮助。谢谢。

【问题讨论】:

您是否考虑过查看the documentation for CREATE TRIGGER 或任何examples of working syntax? 嗨,比尔...我已经查看了与库存/库存变化有关的多个解释和示例,但并没有解决问题。我什至无法解释为什么我会收到错误代码! 很抱歉删除了那里,我希望以更清晰的方式呈现它。是的,在我们说话的时候,我正在努力解决这个问题,因此与之前相比有所改变。错误是不同的,是的,但都仍然是错误代码:1064。 使用 Shoes_By_Sean_Online CREATE TRIGGER Stock_Update AFTER INSERT ON order_details FOR EACH BEGIN UPDATE products SET products.Total_Stock = products.Total_Stock - New.Quantity_Sold WHERE products.Product_ID = New.Product_ID;结束; 我建议您编辑上面的原始问题以添加当前尝试,而不是将其挤进评论中(说使其更清晰)。包括 complete 错误消息。如果您正在使用 DELIMITER,请告诉我们您是如何使用它的。 【参考方案1】:

你必须使用分隔符 您可以将架构添加到表中

DELIMITER $$
 CREATE TRIGGER Stock_Update 
 AFTER INSERT ON Shoes_By_Sean_Online.order_details 
 FOR EACH ROW 
  BEGIN 
    UPDATE products 
      SET products.Total_Stock = products.Total_Stock - New.Quantity_Sold 
    WHERE products.Product_ID = New.Product_ID;
  END$$
DELIMITER ;

【讨论】:

nbk,非常感谢。我现在拥有它,我必须为此感谢你。非常感谢!

以上是关于MySQL 查询 - 创建一个触发器,在销售发生后更新库存水平的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 视图触发器函数存储过程

mysql视图的作用是啥

Mysql 2 在同一个触发器中更新

创建触发器的 MySql 查询中的错误在哪里

mysql 日志记录触发器,查找更改的列

mysql的 视图触发器事务存储过程函数索引与慢查询优化