如何更新MySQL表行';当';更新前';扳机开火了?

如何更新MySQL表行';当';更新前';扳机开火了?,mysql,triggers,Mysql,Triggers,我创建了一个表 数据库名称-mytrigger 表名-员工审计 use mytrigger; create table employee_audit( id int auto_increment primary key, employeeNumber int not null, lastName varchar(50) not null, changee datetime default null, action varchar(50) defa

我创建了一个表

数据库名称-mytrigger
表名-员工审计

use mytrigger;
create table employee_audit(
     id int auto_increment primary key,
     employeeNumber int not null,
     lastName varchar(50) not null,
     changee datetime default null,
     action varchar(50) default null
    );
之后,我创建了一个更新触发器

我的名字是

员工更新前

DELIMITER $$
create trigger before_employees_update
before update on employee_audit
for each row
begin
insert into employee_audit
set action ='update',
employeeNumber = OLD.employeeNumber,
lastName = OLD.lastName,
changee = now();
end$$
DELIMITER ;
之后,我使用以下命令在表中插入值->

insert into employee_audit values(1,112,'prakash','2015-11-12 15:36:20' ,' ');
之后,我想更新id=1的表行

但如果出现错误,则不会执行

错误1442(HY000):无法更新存储中的表“employee_audit” 函数/触发器,因为调用 此存储函数/触发器


当我在谷歌上搜索时,我发现了很多同样错误的问题。但无法解决我的问题。我无法更新行的原因是什么

根据我的建议,您可以创建一个
日志表
,如
员工审计日志

在主表中的每次插入或更新中,您都可以在此表中创建新条目或更新现有记录


您还可以将
updated\u timestamp列添加到
LOG
表中,该表维护特定记录何时更新。

根据我的建议,您可以创建一个
LOG表
,如
employee\u audit\u LOG

在主表中的每次插入或更新中,您都可以在此表中创建新条目或更新现有记录



您还可以将
updated\u timestamp列
添加到
LOG
表中,该表维护特定记录何时更新。

错误本身会告诉您答案。这是因为,不能使用正在执行触发器的同一个表。您需要将审核日志存储到不同的表中。

错误本身会告诉您答案。这是因为,不能使用正在执行触发器的同一个表。您需要将审核日志存储到不同的表中。

错误消息非常清楚:您不能对导致触发的表进行更新。也许你可以重新考虑你的逻辑,以避免这种需要。告诉我们更多关于你最终是如何使用这种设计的,也许有人可以给你一个解决办法。@Tim我是MySQL trigger的新手,我正在学习本教程,请重新阅读我的第一条评论。MySQL不允许递归触发器,因此您在这里尝试的操作将不起作用。错误消息非常清楚:您不能对导致触发的表进行更新。也许你可以重新考虑你的逻辑,以避免这种需要。告诉我们更多关于你最终是如何使用这种设计的,也许有人可以给你一个解决办法。@Tim我是MySQL trigger的新手,我正在学习本教程,请重新阅读我的第一条评论。MySQL不允许递归触发器,所以您尝试在这里执行的操作无效。好的,那么我需要再创建一个表来更新此内容?@VedPrakash是的,根据我了解您的要求。好的,那么我需要再创建一个表来更新此内容?@VedPrakash是的,据我所知,我了解您的要求。您能帮助我如何将审计日志存储到不同的表中吗?@VedPrakash它非常简单。创建与“employee_audit_log”相同的表“employee_audit_log”,并使用触发器中的“insert into employee_audit_log”。请您帮助我如何将审计日志存储到其他表中。@VedPrakash非常简单。创建与“employee_audit”相同的表“employee_audit_log”,并使用触发器中的“insert into employee_audit_log”。
update employee_audit set lastName = 'Sharma' where employeeNumber =112;