1

我想查看在日志表中输入的新记录和更新,我为此创建了一个触发器,但我收到错误 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”,因为它已被调用此存储函数/触发器的语句使用

4

2 回答 2

0

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

Update cust_changes
SET name = NEW.name
WHERE id=NEW.id
于 2019-07-04T20:14:23.490 回答
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 添加您的版本。

于 2019-07-06T06:27:21.340 回答