【数据库SQL 】触发器的定义、执行与删除

女排世界杯冠军54892025-12-13 13:47:07

1. 定义触发器(CREATE TRIGGER)

触发器是基于表定义的一组预定义操作,用于在特定事件发生时自动执行。

语法

CREATE TRIGGER trigger_name

{BEFORE | AFTER} {INSERT | UPDATE | DELETE}

ON table_name

FOR EACH ROW

BEGIN

-- 触发器操作

SQL语句;

END;

关键点说明:

• trigger_name: 触发器的名称,需唯一。

• {BEFORE | AFTER}: 指定触发器在事件发生前(BEFORE)还是后(AFTER)执行。

• {INSERT | UPDATE | DELETE}: 指定触发器的触发事件,可以是插入、更新或删除。

• table_name: 触发器绑定的表。

• FOR EACH ROW: 每行触发一次操作。

• BEGIN...END: 定义触发器的具体逻辑,可以包含多条SQL语句。

定义触发器的例子

例1: 在插入新学生记录时检查年龄是否在有效范围内(18到30岁)

CREATE TRIGGER CheckStudentAge

BEFORE INSERT ON Students

FOR EACH ROW

BEGIN

IF NEW.Age < 18 OR NEW.Age > 30 THEN

SIGNAL SQLSTATE '45000'

SET MESSAGE_TEXT = 'Age must be between 18 and 30.';

END IF;

END;

例2: 在删除课程记录时,自动删除未选课的学生记录

CREATE TRIGGER DeleteUnregisteredStudents

AFTER DELETE ON Courses

FOR EACH ROW

BEGIN

DELETE FROM Students WHERE StudentID NOT IN (SELECT DISTINCT StudentID FROM Courses);

END;

2. 执行触发器

触发器的执行是自动完成的,无需显式调用。

触发器会在其绑定的表发生相关事件时自动触发。

执行触发器的场景:

• 插入记录:触发 INSERT 触发器。

• 更新记录:触发 UPDATE 触发器。

• 删除记录:触发 DELETE 触发器。

执行流程例子

例1: 插入不符合年龄要求的学生记录

INSERT INTO Students (StudentID, Name, Age, Class) VALUES (101, '张三', 17);

• 执行结果:触发器检查 Age < 18,操作失败,提示 Age must be between 18 and 30.

例2: 删除课程记录后自动更新学生表

DELETE FROM Courses WHERE CourseID = 101;

• 执行结果:触发器会检查是否有未选课的学生,并自动删除相应记录。

3. 删除触发器(DROP TRIGGER)

当不需要触发器时,可以使用 DROP TRIGGER 删除它。

语法

DROP TRIGGER [IF EXISTS] trigger_name;

关键点说明:

• IF EXISTS: 可选参数,防止触发器不存在时报错。

• trigger_name: 要删除的触发器名称。

删除触发器的例子

删除触发器 CheckStudentAge

DROP TRIGGER IF EXISTS CheckStudentAge;

完整示例:定义、执行、删除触发器

1. 定义触发器

CREATE TRIGGER CheckStudentAge

BEFORE INSERT ON Students

FOR EACH ROW

BEGIN

IF NEW.Age < 18 OR NEW.Age > 30 THEN

SIGNAL SQLSTATE '45000'

SET MESSAGE_TEXT = 'Age must be between 18 and 30.';

END IF;

END;

2. 触发器的自动执行

-- 插入数据

INSERT INTO Students (StudentID, Name, Age, Class) VALUES (101, '张三', 17);

-- 触发器执行,操作失败,提示错误信息。

3. 删除触发器

DROP TRIGGER IF EXISTS CheckStudentAge;

总结

• 定义触发器: 使用 CREATE TRIGGER,绑定表和事件,定义触发的逻辑。

• 执行触发器: 无需显式调用,自动触发。

• 删除触发器: 使用 DROP TRIGGER,指定触发器名称即可。

JKF女郎現象:台灣網路文化中的外貌重視與社群平台影響
日投宝是哪个公司?深度解析这款理财平台的背景与优势