怎么创建和使用mysql触发器
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要讲解了怎么创建和使用mysql触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。什么是触发器触发器用来在某些操作之后/之前,"自动"执行一些操作。(比如插入
千家信息网最后更新 2025年02月01日怎么创建和使用mysql触发器
这篇文章主要讲解了怎么创建和使用mysql触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
什么是触发器
- 触发器用来在某些操作之后/之前,"自动"执行一些操作。(比如插入了新的学生信息,那么在班级表中应该修改学生数)。
- 当insert delete update设置触发器之后,执行insert delete update操作就会自动触发设置的内容。
- 一张表最大能有6个触发器(3*2,三种操作*两种时间(before|after))。
创建触发器
语法:
create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句;
- 触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。
- before|after 代表触发器语句执行时间,如果是before,就是在insert delete update操作之前执行触发器语句;after就是之后。
- 事件就是insert delete update操作中的一个。
- for each row 是代表任何记录执行对应操作都会触发器。
- 触发器语句就是触发器触发时要执行的语句。
MySQL创建语法中的关键词解释:
字段 | 含义 | 可能的值 |
---|---|---|
DEFINER= | 可选参数,指定创建者,默认为当前登录用户(CURRENT_USER); 该触发器将以此参数指定的用户执行,所以需要考虑权限问题; | DEFINER='root@%' DEFINER=CURRENT_USER |
trigger_name | 触发器名称,最好由表名+触发事件关键词+触发时间关键词组成; | |
trigger_time | 触发时间,在某个事件之前还是之后; | BEFORE、AFTER |
trigger_event | 触发事件,如插入时触发、删除时触发; INSERT:插入操作触发器,INSERT、LOAD DATA、REPLACE时触发; UPDATE:更新操作触发器,UPDATE操作时触发; DELETE:删除操作触发器,DELETE、REPLACE操作时触发; | INSERT、UPDATE、DELETE |
table_name | 触发操作时间的表名; | |
trigger_order | 可选参数,如果定义了多个具有相同触发事件和触法时间的触发器时( 如:BEFORE UPDATE),默认触发顺序与触发器的创建顺序一致,可以 使用此参数来改变它们触发顺序。mysql 5.7.2起开始支持此参数。 FOLLOWS:当前创建触发器在现有触发器之后激活; PRECEDES:当前创建触发器在现有触发器之前激活; | FOLLOWS、PRECEDES |
trigger_body | 触发执行的SQL语句内容,一般以begin开头,end结尾 | begin .. end |
Mysql触发器用法举例:
1、MySQL触发器Insert触发更新同一张表:
下面我们有一个表"tmp1",tmp1表有两个整型字段:n1、n2。我们要通过触发器实现,在tmp插入记录时,自动将n2字段的值设置为n1字段的5倍。
创建测试表和触发器:
-- 创建测试表 drop table if exists tmp1; create table tmp1 (n1 int, n2 int); -- 创建触发器 DELIMITER $ drop trigger if exists tmp1_insert$ create trigger tmp1_insert before insert on tmp1 for each row begin set new.n2 = new.n1*5; end$ DELIMITER ;
测试触发更新效果:
mysql> insert tmp1(n1) values(18); Query OK, 1 row affected (0.01 sec) mysql> insert tmp1(n1) values(99); Query OK, 1 row affected (0.00 sec) mysql> select * from tmp1; +------+------+ | n1 | n2 | +------+------+ | 18 | 90 | | 99 | 495 | +------+------+ 2 rows in set (0.00 sec)
2、MySQL触发器Update触发更新另一张表:
下面有有两个表tmp1、tmp2,两个表都有一个相同的字段name。使用触发器实现更新一个表的name时,将另外一个表的name也更新。
创建测试表和触发器:
-- 创建测试表和插入测试数据 drop table if exists tmp1; drop table if exists tmp2; create table tmp1 (id int, name varchar(128)) default charset='utf8'; create table tmp2 (fid int, name varchar(128)) default charset='utf8'; insert into tmp1 values(1, '爱E族'); insert into tmp2 values(1, '爱E族'); -- 创建触发器 DELIMITER $ drop trigger if exists tmp1_update$ create trigger tmp1_update after update on tmp1 for each row begin update tmp2 set name=new.name where fid=new.id; end$ DELIMITER ;
测试触发更新效果:
mysql> select * from tmp1; +------+---------+ | id | name | +------+---------+ | 1 | 爱E族 | +------+---------+ 1 row in set (0.00 sec) mysql> select * from tmp2; +------+---------+ | fid | name | +------+---------+ | 1 | 爱E族 | +------+---------+ 1 row in set (0.00 sec) mysql> update tmp1 set name='aiezu.com' where id=1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from tmp1; +------+-----------+ | id | name | +------+-----------+ | 1 | aiezu.com | +------+-----------+ 1 row in set (0.00 sec) mysql> select * from tmp2; +------+-----------+ | fid | name | +------+-----------+ | 1 | aiezu.com | +------+-----------+ 1 row in set (0.00 sec)
看完上述内容,是不是对怎么创建和使用mysql触发器有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。
触发器
更新
测试
事件
时间
语句
内容
参数
字段
就是
两个
关键
关键词
顺序
相同
代表
学生
效果
激活
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
国家论文数据库
公司代理服务器暴雪战网
shsh自建服务器
网络安全文明上网该怎么写
微服务公用一个数据库
网络安全福建省院校
tcp配置ip连接服务器
举报网络安全电话
校园网络安全人员管理制度
幼儿园网络安全课黑板报
mt4有多少个服务器
璧山区工商软件开发服务代理商
办公软件开发上市公司
网络技术公司杭州
邮箱aol服务器管理员
服务器未反应是什么意思
jsp向数据库添加中文
竞胜网络技术有限公司
幼儿园网络安全简单画
传统数据库公司和阿里
人类样本数据库
昆明软件开发多少钱
矢量数据库概念
军事科技与互联网的关系
数据库技术工资
硬盘当数据库
小乳牙互联网科技
剑桥单晶数据库标准
漳州购物软件开发
wind万得数据库学生版