千家信息网

怎么使用MySQL触发器

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了怎么使用MySQL触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。一、MySQL触发器创建:1、MySQL触发器的创建语法:CREATE[DEFIN
千家信息网最后更新 2025年11月07日怎么使用MySQL触发器

这篇文章主要讲解了怎么使用MySQL触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

一、MySQL触发器创建:

1、MySQL触发器的创建语法:

CREATE [DEFINER = { 'user' | CURRENT_USER }] TRIGGER trigger_nametrigger_time trigger_eventON table_nameFOR EACH ROW[trigger_order]trigger_body

2、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

 

3、触发执行语句内容(trigger_body)中的OLD,NEW:

  在trigger_body中,我们可以使用NEW表示将要插入的新行(相当于MS SQL的INSERTED),OLD表示将要删除的旧行(相当于MS SQL的DELETED)。通过OLD,NEW中获取它们的字段内容,方便在触发操作中使用,下面是对应事件是否支持OLD、NEW的对应关系:

事件OLDNEW
INSERT×
DELETE×
UPDATE

  由于UPDATE相当于删除旧行(OLD),然后插入新行(NEW),所以UPDATE同时支持OLD、NEW;

4、MySQL分隔符(DELIMITER):

  MySQL默认使用";"作为分隔符,SQL语句遇到";"就会提交。而我们的触发器中可能会有多个";"符,为了防止触发器创建语句过早的提交,我们需要临时修改MySQL分隔符,创建完后,再将分隔符改回来。使用DELIMITER可以修改分隔符,如下:

DELIMITER $... --触发器创建语句;$  --提交创建语句;DELIMITER ;

二、MySQL触发器创建进阶:

1、MySQL触发器中使用变量:

  MySQL触发器中变量变量前面加'@',无需定义,可以直接使用:

-- 变量直接赋值set @num=999; -- 使用select语句查询出来的数据方式赋值,需要加括号:set @name =(select name from table);

2、MySQL触发器中使用if语做条件判断:

-- 简单的if语句:set sex = if (new.sex=1, '男', '女'); -- 多条件if语句:if old.type=1 then  update table ...;elseif old.type=2 then  update table ...;end if;

三、MySQL查看触发器:

  可以使用"show triggers;"查看触发器。由于MySQL创建的触发器保存在"information_schema库中的triggers表中,所以还可以通过查询此表查看触发器:

-- 通过information_schema.triggers表查看触发器:select * from information_schema.triggers; -- mysql 查看当前数据库的触发器show triggers; -- mysql 查看指定数据库"aiezu"的触发器show triggers from aiezu;

四、MySQL删除触发器:

1、可以使用drop trigger删除触发器:

drop trigger trigger_name;

2、删除前先判断触发器是否存在:

drop trigger if exists trigger_name

五、Msql触发器用法举例:

1、MySQL触发器Insert触发更新同一张表:

  下面我们有一个表"tmp1",tmp1表有两个整型字段:n1n2。我们要通过触发器实现,在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_insertbefore insert on tmp1for each rowbegin  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_updateafter update on tmp1for each rowbegin  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安全错误 数据库的锁怎样保障安全 光音网络技术 软件开发工资分析报告ppt 数据库视图概念 曲洲老师的网络安全手抄报 数据库合成两个表 专科计算机网络技术没学好 一般软件开发公司的上游公司是 电脑显示服务器打不开怎么办 重庆一站式网络技术服务内容 我的世界服务器资源区 清楚数据库残留 诚信经营桌面共享软件开发 网络安全的五个知识点 虎丘区远程指导软件开发活动 大连网络安全专业好就业吗 模板式软件开发价格表 华三服务器外部健康灯闪烁 云服务器可以用企业网站么 搜狗网络技术 网络安全知识口诀童谣 魔兽怀旧服散人选哪个服务器 公安网络安全5个注意 怎么换手机网页服务器 涉密软件开发 标准 杨浦区网络技术哪家好 电脑显示服务器打不开怎么办 南京创惠互联网科技怎么样 网络安全技术及应用第三版选择题 关系数据库接口技术包括 网络安全地方立法
0