sql触发器

本文介绍了数据库触发器,它由INSERT、UPDATE、DELETE语句等事件触发相应操作。还讲解了触发器的基本创建,如create [or replace]、before | after等关键字的含义,以及行级触发的概念,并给出更新工资触发器和模拟mysql自增id两个创建实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、触发器是什么?

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。

2、触发器基本创建

create [or replace] 中 or replace 和存储过程/函数中一致,是 存在则覆盖,不存在则创建

before | after  是指触发器在执行之前还是之后进行

insert | update | delete  是指执行什么事件时执行触发器,增删改

for each row 代表 是否行级触发

/*
  触发器
  语法:
      create or replace trigger 触发器名
      before | after
      insert | update | delete
      on 表名
      [for each row]  -- 可选,是否行级触发,每行运行都会执行
      declare
           -- 变量定义
      begin
           -- 触发器执行语句
      end;
      
*/

实例一:更新工资触发器(新工资不能比之前工资低)

create or replace trigger tri_updatesal
before
update
on emp
for each row
declare
  
begin
  if :old.sal > :new.sal then
    dbms_output.put_line('新工资不能比之前工资低');
   -- raise_application_error(-20002,'新工资不能比之前工资低');
  end if;
end;

实例二:模拟mysql中 auto自增id

主要原理:创建序列,每次执行insert语句前调用触发器,进行pid赋值序列nextval。

/*
   模拟mysql自增id
*/
-- 创建表
create table person(
  pid number primary key,
  pname varchar2(10)
)

-- 插入  pid 列 为null
insert into person values(null,'zs');

--查询
select * from person;

-- 创建序列  自增id用序列
create sequence seq_person_pid;

-- 创建触发器
create or replace trigger tri_insertpid
before
insert
on person
for each row
declare

begin
  -- 查询出序列并赋值给person表pid
  select seq_person_pid.nextval into :new.pid from dual;
end;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值