Триггеры SQL вызывают ошибки - PullRequest
0 голосов
/ 26 февраля 2012

Давайте создадим таблицу TestParent, которая кэширует общее значение столбца num в таблице TestChild и вставит несколько строк.

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'

Вставка произошла, но хранимая процедура не была вызвана. Что происходит?

1 Ответ

2 голосов
/ 26 февраля 2012

Вам нужно использовать NEW.parent_id для ссылки на только что вставленное значение

CREATE TRIGGER TestInsert
AFTER INSERT ON TestChild
FOR EACH ROW CALL Sync (NEW.parent_id);
...