更新/İnsert触发器和1442错误后的Mysql

时间:2019-07-04 19:54:36

标签: mysql triggers phpmyadmin mysql-error-1442

我想查看在日志表中输入的新记录和更新,为此创建了一个触发器,但出现错误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 :(得分:0)

您必须使用伪表名称OLD或NEW来引用触发器中的数据。

Update cust_changes
SET name = NEW.name
WHERE id=NEW.id

答案 1 :(得分:0)

如果在更新的语句中使用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添加您的版本。