我想查看在日志表中输入的新记录和更新,为此创建了一个触发器,但出现错误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”,因为调用该存储函数/触发器的语句已使用该表
答案 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添加您的版本。