我应该在每次删除行之前使用MySQL触发器语句吗
我对我的RDBMS很陌生。今天我在MySQL中遇到了主题触发器。 假设我有一个名为person的表和另一个名为backup\u person的表来存储person表中删除的行我应该在每次删除行之前使用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
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
本身
所以你只需要创建一次