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    -  这是触发操作时间,应为"BEFORE"或"AFTER"。

trigger_event  -  激活触发器的操作名称类型。它可以是 INSERT UPDATE 删除操作。触发器一次只能调用一个事件。

table_name      -  这是与触发器关联的表的名称。它必须写在ON关键字之后。如果未指定表名,则触发器将不存在。

BEGIN END      -  最后,无涯教程将指定激活触发器时要执行的语句。

例如,假设要使用触发器更新列名称 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 Create Trigger

接下来,无涯教程将在插入触发器之前创建一个。如果有人尝试插入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 

如果触发器创建成功,将获得如下输出:

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列中时,触发器将自动填充零值。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

左耳听风 -〔陈皓〕

JavaScript核心原理解析 -〔周爱民〕

Electron开发实战 -〔邓耀龙〕

Web安全攻防实战 -〔王昊天〕

To B市场品牌实战课 -〔曹林〕

物联网开发实战 -〔郭朝斌〕

etcd实战课 -〔唐聪〕

Web 3.0入局攻略 -〔郭大治〕

结构学习力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)