Mysql после обновления / вставки триггеров и 1442-ошибка - PullRequest
1 голос
/ 04 июля 2019

Я хочу видеть новые записи и обновления, внесенные в таблицу журнала, я создал триггер для этого, но у меня появляется ошибка 1442. Вы можете мне помочь, пожалуйста?

CREATE TRIGGER `trigger_changes`
    AFTER UPDATE ON `customers`
    FOR EACH ROW 
    Update customers c INNER JOIN cust_changes ch ON ch.id = c.id SET ch.name = c.name

1442 - Не могуобновите таблицу 'cust_changes' в хранимой функции / триггере, поскольку она уже используется оператором, который вызвал эту хранимую функцию / триггер

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Если вы используете OLD.id (или NEW.id) в обновленном операторе, тогда предложенный mysql (как @PeterHe) будет счастлив. Если ваша модель отличается или вы делаете что-то другое, то вы должны сообщить нам.

drop table if exists t,t1;
create table t(id int, name varchar(3));
create table t1(id int,name varchar(3));

insert into t values(1,null);
insert into t1 values(1,null);

CREATE TRIGGER t
    AFTER UPDATE ON t
    FOR EACH ROW 
    Update t INNER JOIN t1  ON t1.id = old.id 
        SET t1.name = t.name;

update t set name = ('aaa');

select * from t1;

+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
+------+------+
1 row in set (0.00 sec)

Как и ожидалось, без ошибок. Пожалуйста, добавьте свои версии для mysql и phpmyadmin.

0 голосов
/ 04 июля 2019

Вы должны ссылаться на данные в триггере, используя псевдотабличные имена OLD или NEW.

Update cust_changes
SET name = NEW.name
WHERE id=NEW.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...