0
Давайте создадим таблицу TestParent
, которая кэширует общее значение столбца num
в таблице TestChild
и вставляет некоторые строки.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
Потому что это бесплатный движок базы данных с множеством недостатков, подобных этому. – Kamil
1. MySQL не является бесплатным - он лицензирован GPL. 2. Это потому, что это не синтаксическая ошибка. После создания MySQL не имеет никакого способа узнать, в каком contex запускается триггер. Существует pososbility (хотя я не могу придумать что-либо в то время), где триггер, определенный как вы, имел бы смысл. – Mchl