0
TestChild
テーブルのnum
列の合計値をキャッシュし、いくつかの行を挿入するTestParent
テーブルを作成します。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'
を与えるが、ストアドプロシージャが呼び出されていません。どうしたの?
を挿入してしまった値に感謝を参照するために
NEW.parent_id
を使用する必要があります。トリガーが作成されたときにIDがこの種のエラーを捕まえられない、または捕まえない理由は何ですか? – spraffこれは、このような欠点が多いフリーウェアのデータベースエンジンです。 – Kamil
1. MySQLはフリーウェアではなく、GPLのライセンスを受けています。 2.構文エラーではないためです。作成時に、MySQLはトリガが実行されるコンテキストを知る方法がありません。あなたのような定義されたトリガーが理にかなっている場合、ポジショニングがあります(私はその時は思い付くことはできませんが)。 – Mchl