Mysql

嘗試使用觸發器更新庫存時出錯

  • May 26, 2018

我基本上有 2 張桌子

CREATE TABLE PRODUCTS (
   id_product BIGINT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   code VARCHAR(6) NOT NULL UNIQUE,
   name VARCHAR(30) NOT NULL,
   stock INT(4) UNSIGNED NOT NULL
);

CREATE TABLE PRODUCT_SALES (
   id_product_sale BIGINT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   QUANTITY INT(4) UNSIGNED NOT NULL,
   product_id BIGINT(4) UNSIGNED NOT NULL,
   FOREIGN KEY (product_id) REFERENCES PRODUCTS(id_product)
);

和一個觸發器

CREATE TRIGGER updateStock
AFTER INSERT
ON PRODUCT_SALES
FOR EACH ROW
   UPDATE PRODUCTS
   SET PRODUCTS.stock = PRODUCTS.stock - PRODUCT_SALES.quantity
   WHERE PRODUCTS.id_product = PRODUCT_SALES.product_id

當有人在product_sales表中插入時,我想更新 X 產品的庫存,但是在我的product_sales表中插入一行時出現以下錯誤

“where 子句”中的未知列“PRODUCT_SALES.product_id”

我正在使用適用於 Win64 (AMD64) 的MariaDB Ver 15.1 Distrib 10.2.12-MariaDB。

我做了一個DBFiddle

在此先感謝,最好的問候。

您不能PRODUCT_SALES.對觸發器內的列使用引用。

在程式碼中,一旦通過FOR EACH ROW,您必須引用新值NEW.

CREATE TRIGGER updateStock
AFTER INSERT
ON PRODUCT_SALES
FOR EACH ROW
   UPDATE PRODUCTS
   SET PRODUCTS.stock = PRODUCTS.stock - NEW.quantity
   WHERE PRODUCTS.id_product = NEW.product_id;

引用自:https://dba.stackexchange.com/questions/207909