Mysql中触发器的使用示例

场景

触发器

触发器(Trigger)是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语旬来调用,

也不需要手工启动,只要一个预定义的事件发生就会被MySQL自动调用。

例如,当对一个数据表进行插入、更新或删除等操作时可以激活触发器并执行触发器。

触发程序经常用于加强数据的完整性约束和业务规则等。

触发程序类似于约束,但比约束更灵活,具有更精细、更强大的数据控制能力。

创建触发器

语法格式

复制代码
CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

trigger_name:触发器名称

trigger_time:标识触发时机,可以指定为before或after

trigger_event:标识触发事件,包括INSERT、UPDATE、DELETE

tbl_name:标识建立触发器的表名

trigger_stmt:触发器程序体。

触发器程序可以使用BEGIN和END作为开始和结束,中间包含多条语句

创建一个名为in_newstu的触发器,触发的条件是向数据表test_student中插入数据之前对新插入的id进行求和计算。

复制代码
CREATE TRIGGER in_newstu BEFORE INSERT ON test_student
FOR EACH ROW SET @ss= NEW.sid+1;

设置变量的初始值为0

复制代码
SET @ss= 0;

插入数据,启动触发器

复制代码
INSERT INTO test_student VALUES (6, '张三', NULL, 13, 101);

查询变量

复制代码
SELECT @ss;

创建一个触发器,当插入的sid等于7时将姓名设为"霸道"

复制代码
CREATE TRIGGER name_student
BEFORE INSERT
ON test_student
FOR EACH ROW
BEGIN
IF new.sid =7 THEN
SET new.sname ='霸道';
END IF;
END

插入数据并验证

复制代码
INSERT INTO test_student VALUES (7, '张1', NULL, 13, 101);

SELECT * FROM test_student WHERE sid = 7;

查看触发器

复制代码
SHOW TRIGGERS;

还可以通过查看系统表查看触发器

复制代码
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = 'name_student';

删除触发器

复制代码
DROP TRIGGER name_student;
相关推荐
数据库那些事儿23 分钟前
Qoder + ADB Supabase :5分钟GET超火AI手办生图APP
数据库·后端
IvorySQL23 分钟前
PostgreSQL 18 异步 I/O(AIO)调优指南
数据库·postgresql
kakacc:28 分钟前
记录一次巧妙的SQL:一对多关联导致的 sum () 、count()等group函数重复计算问题
数据库·sql
心随雨下1 小时前
Redis中Geospatial 实际应用指南
数据库·redis·分布式·缓存
黑夜管理员1 小时前
Sql Server安装报错“服务没有及时响应启动或控制请求”
数据库·sql server
NineData1 小时前
NineData云原生智能数据管理平台新功能发布|2025年9月版
数据库·云原生·devops·ninedata·数据库迁移·数据复制·风险sql管控
junnhwan2 小时前
【苍穹外卖笔记】Day04--套餐管理模块
java·数据库·spring boot·后端·苍穹外卖·crud
川石课堂软件测试2 小时前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
一枚正在学习的小白2 小时前
PG数据文件位置迁移
linux·运维·服务器·数据库
真的想不出名儿2 小时前
上传头像到腾讯云对象存储-前端基于antdv
java·数据库·腾讯云