Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在每次删除行之前使用MySQL触发器语句吗_Mysql_Sql_Rdbms - Fatal编程技术网

我应该在每次删除行之前使用MySQL触发器语句吗

我应该在每次删除行之前使用MySQL触发器语句吗,mysql,sql,rdbms,Mysql,Sql,Rdbms,我对我的RDBMS很陌生。今天我在MySQL中遇到了主题触发器。 假设我有一个名为person的表和另一个名为backup\u person的表来存储person表中删除的行 CREATE TABLE backup_person ( `personID` INT UNSIGNED NOT NULL, `firstName` VARCHAR(20) NOT NULL, `lastName` VARCHAR(20) NOT N

我对我的RDBMS很陌生。今天我在MySQL中遇到了主题触发器。 假设我有一个名为person的表和另一个名为backup\u person的表来存储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语句之前,我是否应该每次执行上述触发器: 例如:
从firstName='Sabin'和lastName='Jose'的人中删除


或者在创建表的过程中执行一次就足够了?

触发器是一种机制,它在每次满足触发器条件时从数据库自动执行

在您的情况下,触发器定义为在person上删除之前的
。因此,每次在表
person
上发生删除之前,DB都会执行触发器

另一方面,存储过程是一个函数,您可以随时手动调用它


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

触发器是一种机制,每次满足触发条件时,从数据库自动执行

在您的情况下,触发器定义为在person上删除之前的
。因此,每次在表
person
上发生删除之前,DB都会执行触发器

另一方面,存储过程是一个函数,您可以随时手动调用它


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

创建触发器的关键在于它保存在数据库中,并在指定事件发生时自动执行。如果每次执行
DELETE
操作时都必须创建触发器,那么最好只执行
INSERT
本身


因此,只需创建一次触发器。

创建触发器的关键在于它保存在数据库中,并在指定事件发生时自动执行。如果每次执行
DELETE
操作时都必须创建触发器,那么最好只执行
INSERT
本身

所以你只需要创建一次