【问题标题】:Mysql After Update/İnsert Triggers and 1442-Error更新/插入触发器和 1442 错误后的 Mysql
【发布时间】:2019-11-15 12:48:30
【问题描述】:

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

【问题讨论】:

  • 错误很明显,没有办法绕过它。如果您可以解释您正在尝试做什么,那么某人可能会提出替代方案。请注意,在更新前的查询中,您可以修改 NEW。值。
  • 当Customers表中的一些数据更新时,我想看看cust_changes表中更新的数据。或者如果你有更好的解决方案,请告诉我

标签: mysql triggers phpmyadmin mysql-error-1442


【解决方案1】:

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

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

【讨论】:

  • 还是同样的问题
  • 你能发布触发触发器的更新语句吗?
  • CREATE TRIGGER trigger_changes AFTER ON UPDATE ON customers FOR EACH ROW 更新客户 c INNER JOIN cust_changes ch ON ch.id = c.id SET ch.name = c.name
  • 不是触发器 DDL。触发此触发器的 UPDATE 语句。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多