触发器

触发器

触发器的基本概念

触发器是和表相关联的一个数据库对象,是一种特殊的存储过程。
触发器关键字:trigger
基本作用:通过对表进行数据的插入、更新或删除等操作来触发,用于执行某些操作的。

触发器的创建

  • 创建语句格式:

    create trigger 触发器名 #[触发器名]
    触发时机 #触发时机:before|after
    触发条件 #触发条件:insert|update|delete
    ON tbl_name #表名
    FOR EACH ROW #对每一行
    trigger_body #执行的操作
    
  • 例子

    #建立一个表来操作
    create table test1(
    id int primary key auto_increment,
    age decimal(3,0)  #decimal是一种浮点型,可规定小数位数
    ) 
    
    #创建触发器(规定岁数范围在0-100)
    create trigger tir_test1_insert
    before insert on test1 for each row
    begin
        if new.age < 0 then set new.age = 0;
        elseif new.age >100 then set new.age = 100;
        end if;
    end;
    
  • new和old
    数据库提供了两个对象new和old分别记录新值和旧值:
    new:当触发插入和更新事件时可用,指向的是被插入的新数据。
    old: 当触发删除和更新事件时可用,指向的是原来旧的数据。
    例如:update更新数据时会把新的数据覆盖之前的数据,那new对象就是保存的新数据,而old对象是保存被覆盖之前的数据。那么相对于insert而言是没有old的,相对于delete而言是没有new的。

    insert 插入时 new 表示插入的数据
    update 更新时,new表示新的数据,old表示的是原数据
    delete 删除时, old 表示的是删除的数据

查看触发器

  • 例子

    	# 查看所有触发器
    	select * from triggers;#查找指定的触发器
    	select * from triggers
     	 where trigger_name='触发器名'; 
    

删除触发器

  • 	drop trigger 触发器名;
    

触发器的使用特例

  • 使用触发器制作日志

    #创建日志表(用来记录其他表的操作)
    create table review
    (
    id int primary key auto_increment,
    username varchar(64),
    action_name varchar(20),
    actiom_time datetime
    )engine innodb default charset utf8;
    
    #创建触发器	
    create trigger test_review_insert
    after insert
    on '需要记录的表' for each row
    begin
        insert into review values(null,user(),'insert',now());
    end;
    

触发器限制

  1. 触发器不能使用将数据返回的存储过程和函数,也不能使用select和call。
  2. 触发器中不能使用开始和结束事务。
  3. 触发器不能写得太复杂,否则没改变一行,所执行的任务就太多了。
  4. 触发器中只要有一条语句出现错误,整个触发器就不会执行。

TIPS:虽然触发器中不能使用select查询数据,不能直接通过参数返回,但是可以通过用户变量带回数据。
例如:创建触发器带回一个参数

create trigger test_review_id
after insert on test1 for each row
begin
    select new.age from test1 where new.id = id into @ages;
end;
    select @ids;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值