首先,找到一個更具描述性的名稱爲您的觸發器;)。
現在針對實際問題,您在觸發器代碼中對ebaylinked
列的引用幾乎大部分都是錯誤的。要使用剛剛更新的記錄中的值,需要使用僞記錄NEW
,這是一個包含表的當前行的單個記錄,因爲它將在更新完成後執行。像ebaylinked.QuantitySold
這樣的引用是不明確的,因爲它們沒有指定哪一行數據是正確的。
另外,您還可以在不可以引用觸發表中的其他行。您的子句SET ... ebaylinked.Processed=0 ... WHERE ... ebaylinked.Processed = 1
因此都是多餘的和錯誤的,因爲行觸發器的唯一一行ebaylinked
可以看到的是當前的那一行。
,您的觸發代碼因此應該像
CREATE TRIGGER `ebaylinked_update_product`
AFTER UPDATE ON `ebaylinked`
FOR EACH ROW
UPDATE product
SET product.product_stock = product.product_stock - NEW.QuantitySold
WHERE product.eBay_ID = NEW.ebay_ID;
注意我忽略了processed
列,因爲它沒有任何用處(提供的觸發插入被包裹在一個事務),但如果你絕對必須使用它,您可以按如下的觸發改變行之前:
DELIMITER //
CREATE TRIGGER `ebaylinked_update_product`
BEFORE UPDATE ON `ebaylinked`
FOR EACH ROW
BEGIN
IF NEW.processed = 1 THEN
UPDATE product
SET product.product_stock = product.product_stock - NEW.QuantitySold
WHERE product.eBay_ID = NEW.ebay_ID;
SET NEW.processed = 0;
END IF;
END;
//
DELIMITER ;
請注意DELIMITER
之後的空格。當觸發器主體包含多個以分號結尾的語句時,此指令在某些客戶端中是必需的。
希望有所幫助。
PS:你可能用觸發器調用存儲過程來做到這一點,但對於這樣簡單的事情,我認爲它會增加更多的複雜性。
這是相同的增加,但沒有更新任何東西,我檢查了所有的字段是正確的,他們是如此非常困惑與它正在發生什麼 –
就這樣,我們都在同一頁面上,爲我自己描述說出你想讓這個觸發器做什麼。 –
我搞砸了,並在更新上,而不是在插入一切工作與新的一個我除了改變加工領域0似乎被忽略?生病將頂端的問題改爲現在的代碼 –