MySQL学习笔记(12)—— SQL触发器:

本文详细介绍了MySQL中的触发器,包括创建单执行语句和多个执行语句的触发器,以及如何查看和删除触发器。触发器在数据库操作如INSERT、UPDATE、DELETE时自动执行,用于实现特定业务逻辑。示例展示了如何在数据表操作前后执行特定操作,并提供了查看触发器信息的SQL语句。
摘要由CSDN通过智能技术生成

12. SQL 触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATAE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

12. 1 创建触发器

触发器(trigger)是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。

  • 创建只有一个执行语句的触发器
    创建一个触发器的语法如下:
create trigger trigger_name trigger_time trigger event on tb1_name for each row trigger_stmt

其中,trigger_name表示触发器名称,用户自行指定;trigger_time表示触发时机,可以指定为before或after;trigger_event表示触发事件,包括INSERT、UPDATE和DELETE;tbl_name表示建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器执行语句。

【例】创建一个单执行语句的触发器,代码如下:

create table account(acct_num int,amount decimal(10,2));
create trigger ins_sum before insert on account
for each row set @sum=@sum+NEW.amount

首先,创建一个account表,表中有两个字段,分别为acct_num字段(定义为int类型)和amount字段(定义成浮点类型);其次,创建一个名为ins_sum的触发器,触发的条件是向数据表account插入数据之前,对新插入的amount字段值进行求和计算。

  • 创建有多个执行语句的触发器
create trigger trigger_name trigger_time trigger_event
on tb1_name for each row
begin
语句执行列表
end

【例】创建有多个执行语句的触发器

create table test1(a1 int);
create table test2(a2,int);
create table test3(a3 int not null,auto_increcement primary key);
create table test4(
	a4 int not null auto_increment primary key,
	b4 int default 0
);

delimeter 
create trigger testref before insert on test1
for each row begin
	insert into test2 set a2=NEW.a1;
	delete from test3 where a3=NEW.a1;
	update test4 set b4=b4=1 where a4=NEW.a1
end
delimiter;

insert into test3 (a3) values
(null),(null),(null),(null),
(null),(null),(null),(null),
insert into test4 (a4) values
(0),(0),(0),(0),(0),(0),(0),(0),;

12.2 查看触发器

  • SHOW TRIGGERS语句
show triggers;
  • 在triggers表中查看触发器信息
    在MySQL中,所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表格中,可以通过查询命令SELECT查看,具体的语法如下:
select * from information_schema.triggers where condition;

从上面的执行结果可以得知:TRIGGER_SCHEMA表示触发器所在的数据库;TRIGGER_NAME后面是触发器的名称;EVENT_OBJECT_TABLE表示在哪个数据表上触发;ACTION_STATEMENT表示触发器触发的时候执行的具体操作;ACTION_ORIENTATION是ROW,表示在每条记录上都触发;ACTION_TIMING表示触发的时刻是AFTER;剩下的是和系统相关的信息

也可以不指定触发器名称,这样将查看所有的触发器,命令如下这个命令会显示TRIGGERS表中所有的触发器信息。:

select * from information_schema.trigger \G

12.3 触发器的使用

触发程序与表相关,当对表执行INSERT、DELETE或UPDATE语句时,将激活触发程序。可以将触发程序设置为在执行语句之前或之后激活
【例】创建一个在account表插入记录之后更新myevent数据表的触发器

create trigger trig_insert after insert on account for each row insert into myevent values(2,'after insert')

上面的代码创建了一个trig_insert触发器,在向表account插入数据之后会向表myevent插入一组数据

12.4 删除触发器

使用DROP TRIGGER语句可以删除MySQL中已经定义的触发器,删除触发器语句的基本语法格式如下:

drop trigger [schema_name.] trigger_name

其中,schema_name表示数据库名称,是可选的。如果省略了schema,将从当前数据库中舍弃触发程序;trigger_name是要删除的触发器的名称。
【例】删除一个触发器,代码如下

drop trigger test_db.ins_num;

上面的代码中test是触发器所在的数据库,ins_sum是一个触发器的名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyw2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值