【问题标题】:After INSERT Trigger do insert table a_temp and delete from table a_temp在 INSERT 触发器后插入临时表并从临时表中删除
【发布时间】:2017-02-20 09:08:13
【问题描述】:

我有两个表employeesemployees_audit,我在插入后创建了一个触发器,它将向employees_audit插入数据然后从员工表中删除数据

CREATE TABLE employees (
        employeeNumber INT NOT NULL,
        lastname VARCHAR(50) NOT NULL
    );

CREATE TABLE employees_audit (
    id INT AUTO_INCREMENT PRIMARY KEY,
    employeeNumber INT NOT NULL,
    lastname VARCHAR(50) NOT NULL,
    changedat DATETIME DEFAULT NULL,
    action VARCHAR(50) DEFAULT NULL
);

这就是触发器

CREATE DEFINER=`root`@`localhost` TRIGGER `test`
AFTER INSERT ON `employee` 
FOR EACH ROW 
BEGIN 
insert into employees_audit(employeeNumber,lastname,changedat,action) values(NEW.employeeNumber,NEW.lastname,CURDATE(),'wew'); delete from employee; 
END

但是当我在表员工上插入数据时,我得到了这个错误

#1442 - Can't update table 'employee' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

如何创建触发器插入事件,删除具有触发器的表上的数据?

【问题讨论】:

  • 雇员表插入审计表后要删除,那为什么需要雇员表,直接插入审计表?无需触发。
  • 我被要求做那样的​​事情
  • 请谁反对这个问题给出一个理由,所以我知道我的错误Thx!
  • 如果“我被要求做那样的​​事情”,那么有问题;数据库设计/要求/您的理解。你也需要寻找这方面,因为从根本上你做错了。
  • 是的,我也觉得这很奇怪.. 但是,我仍然希望得到解决方案:)

标签: mysql sql triggers


【解决方案1】:

你不能这样做。如果您要从员工表中删除所有数据,为什么需要该表。直接插入employees_audit。

【讨论】:

  • 我被要求做那样的​​事情
  • 您不能删除激活触发器的表中的行。您可以在您的应用程序中编写逻辑而不使用触发器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多