MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL BEFORE DELETE触发器

BEFORE DELETE每当在表上执行删除操作时,都会自动调用MySQL中的触发器。在本文中,我们将学习如何使用其语法和示例创建删除前触发器。

语法

以下是创建在MySQL中删除之前触发:
CREATE TRIGGER trigger_name 
BEFORE DELETE
ON table_name for EACH ROW
Trigger_body ;
BEFORE DELETE触发器语法参数可以解释如下:
首先,我们将指定我们要创建的触发器的名称。它在架构中应该是唯一的。 第二,我们将指定触发动作时间,该时间应为DELETE之前。在表的每一行更改发生之前,将触发此触发器。 第三,我们将指定与触发器关联的表的名称。它必须写在ON关键字之后。如果不指定表名,则触发器将不存在。 最后,我们将指定触发触发器时要执行的语句。
如果要执行多个语句,我们将使用包含一组查询的BEGIN END块来定义触发器的逻辑。请参见以下语法:
DELIMITER $ 
CREATE TRIGGER trigger_name BEFORE DELETE
ON table_name for EACH ROW
BEGIN
   variable declarations
   trigger code
END$
DELIMITER ;

限制

我们可以访问OLD行,但是无法在DELETE触发器之前更新它们。 我们无法访问NEW行。这是因为不存在新行。 我们无法在VIEW上创建BEFORE DELETE触发器。

删除前触发器示例

让我们了解如何使用 CREATE TRIGGER语句创建删除前触发器
假设我们已经创建了一个名为salaries的表来存储员工的薪水信息,如下所示:
CREATE TABLE salaries (
    emp_num int PRIMARY KEY,
    valid_from DATE NOT null,
    amount DEC(8 , 2 ) NOT null default 0
);
接下来,我们将使用以下语句在此表中插入一些记录:
INSERT INTO salaries (emp_num, valid_from, amount)
VALUES
    (102, '2020-01-10', 45000),
    (103, '2020-01-10', 65000),
    (105, '2020-01-10', 55000),
    (107, '2020-01-10', 70000),
    (109, '2020-01-10', 40000);
执行SELECT查询以查看表数据。
MySQL BEFORE DELETE Trigger
第三,我们将创建另一个名为Salary_archives的表,该表保留已删除工资的信息。
CREATE TABLE salary_archives (
    id int PRIMARY KEY AUTO_INCREMENT,
    emp_num INT,
    valid_from DATE NOT null,
    amount DEC(18 , 2 ) NOT null default 0,
    deleted_time TIMESTAMP default NOW()
);
然后,我们将创建一个BEFORE DELETE触发器,以便在从salaries表中删除一行之前将新记录插入salary_archives表中。
DELIMITER $
CREATE TRIGGER before_delete_salaries
BEFORE DELETE
ON salaries for EACH ROW
BEGIN
    INSERT INTO salary_archives (emp_num, valid_from, amount)
    VALUES(OLD. emp_num, OLD.valid_from, OLD.amount);
END$ 
DELIMITER ;

MySQL BEFORE DELETE触发器
在此触发器中,我们首先指定了触发器名称before_delete_salaries 。然后,指定触发事件。第三,我们指定了与触发器关联的表名。最后,我们在触发器主体内部编写了触发器逻辑,该逻辑将已删除的行插入salary_archives表中。

如何调用"删除前"触发器?

让我们测试上面创建的BEFORE DELETE触发器以及如何调用它们。因此,首先,我们将从薪金表中删除一行:
mysql> DELETE FROM salaries WHERE emp_num = 105;
第二,我们将通过使用select语句从salary_archives表中查询数据,以验证是否创建了上面创建的触发器:
mysql> SELECT * FROM salary_archives;
执行一条语句后,我们可以看到触发器已成功调用,并将新记录插入了salary_archives表中。
MySQL在删除触发器之前
第三,我们将从工资表中删除所有行:
mysql> DELETE FROM salaries;
最后,我们将再次查询salary_archives表中的数据。该触发器被调用了四次,因为DELETE语句从salaries表中删除了四条记录。参见下面的输出:
MySQL删除前触发器

如何要在MySQL工作台中创建BEFORE DELETE触发器?

要使用 MySQL工作台创建BEFORE DELETE触发器,我们首先需要启动它,然后使用我们之前创建的用户名和密码登录。我们将得到如下所示的屏幕:
MySQL删除前触发器
现在执行以下操作创建删除前触发器的步骤:
1、转到"导航"选项卡,然后单击 Schema菜单,该菜单包含 MySQL 服务器。
2、选择数据库(例如,employeedb),双击它。它将显示 子菜单,其中包含表,视图,函数和存储过程。参见下面的屏幕。
MySQL删除触发器
3、展开 表格子菜单,然后选择要在其上创建触发的表。选择表格后,右键单击所选表格(例如,薪水),然后单击 Alter表格 选项。参见下图:
MySQL在删除触发器之前
4、单击"更改表"选项将显示以下屏幕:
MySQL删除前触发器
5,现在,单击上一部分红色矩形框中显示的 "触发"选项卡,然后选择"删除前的定时/事件"。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择计时/事件获得默认的触发器代码:
MySQL删除触发器之前
6、现在,完成触发代码,再次检查它们,如果没有发现错误,请单击 应用按钮。
MySQL BEFORE DELETE Trigger
7、点击"应用"按钮后,点击" 完成"按钮完成操作。
 MySQL在删除触发器之前
8、如果进入架构菜单,我们将在工资表下看到触发器 salaries_before_trigger ,如下所示:
MySQL在删除触发器之前
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4