数据库基础13——MySQL触发器

MySQL触发器

1、触发器简介

什么是触发器?

触发器就是监听(insert、update、delete)操作,然后自动执行其他sql语句(位于begin和end之间)。

2、使用触发器

2.1创建触发器

注意事项:

  • 唯一的触发器名;
  • 触发器关联的表;
  • 触发器应该响应的活动( DELETE、 INSERT或UPDATE);
  • 触发器何时执行(处理之前或之后)。

仅支持表:只有表支持触发器,视图不支持,临时表也不支持。

触发器按每个表每个事件每次地定义,每个表每个事件每次只允许输入一个触发器。因此,每个表最多支持6个触发器(每条INSERT、 UPDATE和DELETE的之前和之后)。单一触发器不能与多个事件或多个表关联,所
以,如果你需要一个对INSERT和UPDATE操作执行的触发器,则应该定义两个触发器

create trigger 触发器名称 after/before insert/update/delete on 表名
for each row
begin
sql语句;
end
after/before:可以设置为事件发生前或后
insert/update/delete:它们可以在执行insertupdatedelete的过程中触发
for each row:每隔一行执行一次动作

2.2 删除触发器

触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。

drop trigger 触发器名称;  --删除触发器

2.3 insert触发器

  • 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
  • 在BEFORE INSERT触发器中, NEW中的值也可以被更新(允许更改被插入的值);
  • 对于AUTO_INCREMENT列, NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
create trigger neworder after insert on orders
for each row 
select new.order_num;
/*
当插入一个新数据时,mysql会生成一个新的订单编号,以为是auto_increment的。 这时候NEW这张虚拟表存的就是新生成的数据,淡然可以从New.order_num 拿出当前插入的订单ID。
after 事件之后肯定会将新数据存到new虚拟表。
*/

New :就是事件发生 before 或after 保存的新数据

2.4 delete触发器

delete 语句before 和after 执行触发器。

  • 在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
  • OLD的值全部是只读的,不能更新。
create trigger deleteorder before delete on orders
for each row
begin
	sql语句
end;

在delete执行之前,旧数据会被存到old虚拟表,可以查出来。进行存档。

begin 和and 之间可以有多条语句。

2.5 update触发器

update触发器在 update 语句 beforeafter 执行。

  • UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前( UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值;
  • BEFORE UPDATE触发器中, NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
  • OLD中的值全都是只读的,不能更新。

例如:

create trigger updatevendor before update on vendors
for each row 
set new.vend_state=Upper(new.vend_state);

-- update 之前执行触发器,并且要更改的新数据存在new这个虚拟表,在执行update之前可以修改,这里过滤数据变为大写,然后再执行update。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值