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

MySQL 创建触发器

在本文中,我们将学习如何在MySQL中创建第一个触发器。我们可以使用CREATE TRIGGER语句在MySQL中创建新的触发器。这是为了确保在使用CREATE TRIGGER命令时具有触发特权。以下是创建触发器的基本语法:
CREATE TRIGGER trigger_name  trigger_time trigger_event
ON table_name for EACH ROW
BEGIN
--variable declarations
--trigger code
END;  

参数说明

创建触发器语法包含以下参数:
trigger_name: 这是触发器的名称我们要创建的。它必须在CREATE TRIGGER语句之后编写。这是为了确保触发器名称在架构中应该唯一。
trigger_time: 这是触发器操作时间,应该是"前"或"后"。它是定义触发器时的必需参数。它指示在对表进行每次行修改之前或之后将调用触发器。
trigger_event: 这是激活触发器的操作名称类型。它可以是 INSERT , UPDATE 或 Delete 操作。触发器一次只能调用一个事件。如果我们要定义一个由多个事件调用的触发器,则需要定义多个触发器,每个事件一个。
表名: 与触发器关联的表。它必须写在ON关键字之后。如果未指定表名,则触发器将不存在。
BEGIN END块: 最后,我们将指定激活触发器时要执行的语句。如果要执行多个语句,我们将使用包含一组查询的BEGIN END块来定义触发器的逻辑。
触发器主体可以访问该列的值,这些值受DML语句。 NEW OLD 修饰符用于区分DML语句的执行 之前之后的列值。我们可以使用带有NEW和OLD修饰符的列名,分别为 OLD.col_name NEW.col_name 。 OLD.column_name指示在进行更新或删除之前现有行的列。 NEW.col_name表示将要插入的新行或更新后的现有行的列。
例如,假设我们要更新列名 message_info 。在触发器主体中,我们可以访问更新之前的列值 OLD.message_info 和新值 NEW.message_info
我们可以理解下表提供了OLD和NEW修饰符的可用性:
触发事件 OLD NEW
INSERT
UPDATE
DELETE

MySQL触发器示例

让我们开始在 MySQL中创建触发器在employee表中进行修改。首先,我们将通过执行以下语句创建一个名为 employee 的新表:
CREATE TABLE employee(
    name varchar(45) NOT null,  
    occupation varchar(35) NOT null,  
    working_date date,
    working_hours varchar(10)
);
接下来,执行以下语句以 将记录填充到employee表中:
INSERT INTO employee VALUES  
('Robin', 'Scientist', '2020-10-04', 12),
('Warner', 'Engineer', '2020-10-04', 10),
('Peter', 'Actor', '2020-10-04', 13),
('Marco', 'Doctor', '2020-10-04', 14),
('Brayden', 'Teacher', '2020-10-04', 12),
('Antonio', 'Business', '2020-10-04', 11);
接下来,执行 SELECT语句 以验证插入的记录:
MySQL创建触发器
接下来,我们将创建 在插入触发器之前 。如果有人尝试插入 working_hours <0 ,此触发器将自动插入 working_hours = 0
mysql> DELIMITER //
mysql> Create Trigger before_insert_empworkinghours 
BEFORE INSERT ON employee for EACH ROW
BEGIN
if NEW.working_hours < 0 THEN SET NEW.working_hours = 0;
END IF;
END //
如果成功创建触发器,我们将得到如下输出:
MySQL Create Trigger
现在,我们可以使用以下语句来调用此触发器:
mysql> INSERT INTO employee VALUES  
('Markus', 'Former', '2020-10-08', 14);
mysql> INSERT INTO employee VALUES  
('Alexander', 'Actor', '2020-10-012',-13);
执行上述语句后,我们将获得如下输出:
MySQL Create Trigger
在此输出中,我们可以看到,在将负值插入表的working_hours列中时,触发器将自动填充零值。

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4