0
我們來創建一個TestParent
表,它在TestChild
表中緩存num
列的總值,並插入一些行。SQL觸發器導致錯誤
CREATE TABLE TestParent (
id INT NOT NULL PRIMARY KEY,
total INT NOT NULL DEFAULT 0);
CREATE TABLE TestChild (
parent_id INT NOT NULL,
num INT NOT NULL);
INSERT INTO TestParent (id) VALUES (123);
INSERT INTO TestChild (parent_id, num) VALUES (123, 1);
CREATE PROCEDURE Sync (IN parent INT)
UPDATE TestParent SET total = (
SELECT SUM(num) FROM TestChild WHERE parent_id=parent)
WHERE id=parent;
CALL Sync (123);
到目前爲止,這麼好。現在,我想Sync
被自動調用...
CREATE TRIGGER TestInsert
AFTER INSERT ON TestChild
FOR EACH ROW CALL Sync (parent_id);
這也適用。現在,
INSERT INTO TestChild (parent_id, num) VALUES (123, 1);
給
#1054 - Unknown column 'parent_id' in 'field list'
插入已經發生,但存儲的過程沒有被調用。這是怎麼回事?
就是這樣,謝謝值。任何想法爲什麼id不能/在創建觸發器時無法捕捉到這種錯誤? – spraff 2012-02-26 17:44:28
因爲這是免費的數據庫引擎,有很多像這樣的缺點。 – Kamil 2012-02-26 17:57:51
1. MySQL不是免費的 - 它是GPL許可的。這是因爲它不是語法錯誤。在創建時,MySQL無法知道觸發器將在什麼情況下執行。有一個可能性(雖然我當時不能提出),在那裏你定義的觸發器會有意義。 – Mchl 2012-02-26 18:20:12