我应该在每次删除行之前使用MySQL TRIGGER语句

时间:2013-12-31 10:49:58

标签: mysql sql rdbms

我是RDBMS的新手。今天我在MySQL中遇到了TRIGGER主题。 假设我有一个名为person的表和另一个名为backup_person的表来存储表人员中已删除的行。

CREATE TABLE backup_person (
   `personID`         INT UNSIGNED  NOT NULL,
   `firstName`        VARCHAR(20)   NOT NULL,
   `lastName`         VARCHAR(20)   NOT NULL,
   `datetimeDeleted`  DATETIME      NOT NULL,
    PRIMARY KEY(`personID`)
);

我有以下触发器声明:

DELIMITER //
CREATE TRIGGER archiveEmployees
BEFORE DELETE ON person FOR EACH ROW
BEGIN
  INSERT INTO backup_person

  VALUES (OLD.personID, OLD.firstName, OLD.lastName, NOW());
END//

DELIMITER ;

现在问题是我应该在执行delete语句之前每次执行上面的触发器: 例如:DELETE FROM persons WHERE firstName='Sabin' AND lastName = 'Jose';

或在创建表格期间执行一次就足够了吗?

2 个答案:

答案 0 :(得分:2)

触发器是一种在每次满足触发条件时从DB自动执行 的机制。

在您的情况下,触发器定义为BEFORE DELETE ON person。因此,每次在表person上删除之前,数据库都会执行您的触发器。

另一方面,

存储过程是一个可以在每次手动调用时调用的函数。

另一个现有的机制是 Events 。您可以按照您定义的时间表执行它们,即每小时自动执行一次。

答案 1 :(得分:2)

创建触发器的重点是它保存在数据库中并在发生指定事件时自动执行。如果您每次执行DELETE时都必须创建触发器,那么您也可以只执行INSERT本身。

所以你只需创建一次。