如何更新MySQL表行';当';更新前';扳机开火了?
我创建了一个表 数据库名称-mytrigger如何更新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
表名-员工审计
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;