本文共 1592 字,大约阅读时间需要 5 分钟。
MySQL触发器是数据库对象,用于在特定表操作事件发生时自动执行指定的SQL语句。以下是关于MySQL触发器的详细指南。
触发器的创建语法如下:
CREATE TRIGGER trigger_name trigger_time ON tbl_name FOR EACH ROW trigger_stmt
trigger_name
:用户自定义的触发器名称。trigger_time
:触发时机,可选值为 BEFORE
或 AFTER
。tbl_name
:触发器所属的表名。trigger_stmt
:触发器执行的SQL语句或代码块,支持多行使用 BEGIN...END
包裹。支持以下6种触发事件:
同一表最多可创建6个触发器,且不能同时存在相同类型的触发器。
除了基本的 INSERT
、UPDATE
、DELETE
,LOAD DATA
和 REPLACE
语句也能触发触发器。这些语句在执行时,会根据操作类型激活相应的触发器。
INSERT
操作。INSERT
,但在主键或唯一索引存在时,先删除旧记录再插入新记录。BEGIN...END
语法用于包裹触发器体,语法如下:
BEGIN[statement_list]END
statement_list
:包含一系列SQL语句,每条语句用分号结尾。DELIMITER
定义其他分隔符。修改默认分隔符:
DELIMITER $
使用后,语句结尾用 $
结束,修改后需恢复默认:
DELIMITER ;
假设有两个表:class
和 student
,目标是自动更新班级学生数。
DELIMITER $CREATE TRIGGER tri_stuInsert AFTER INSERT ON student FOR EACH ROWBEGIN declare c int; set c = (select stuCount from class where classID = new.classID); update class set stuCount = c + 1 where classID = new.classID;END$DELIMITER ;
使用 DECLARE
定义局部变量,仅在 BEGIN...END
内可用,语法如下:
DECLARE var_name[,...] type [DEFAULT value]
赋值使用 SET
语句:
SET var_name = expr
INSERT
和 UPDATE
触发器中可写。UPDATE
和 DELETE
触发器中可读。查看触发器的语法:
SHOW TRIGGERS [FROM schema_name];
删除触发器的语法:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
通过以上方法,可以灵活配置数据库触发器,提升数据管理效率。
转载地址:http://wdbfk.baihongyu.com/