MySQL第七章 触发器
1.本章目标
触发器
2.触发器
是一种特殊的存储过程
触发器不能手动调用,创建好之后,会由MySQL数据库触发并执行
分类:
前触发器:
brfore:在执行相应操作之前执行触发器中的代码
后触发器:
after:在执行相应操作之后执行粗发其中的代码
种类:
insert , update , delete
语法:
create trigger 触发器名
before/after
insert/update/delete
on 表名
for each row
begin
逻辑代码
end
注意:
在触发器中想要获取更新前或更新后的数据,请使用:new 或者:old字段
再触发器中不能使用select 输出
create table A( aid tinyint primary key default 0, aname char(20) not null default ''); --完成:修改emp表数据后,记录修改前员工姓名和修改后的员工姓名 create table log( id int not null primary key auto_increment, info varchar(200) ) create trigger tr_emp_update after update on A for each row begin declare info varchar(200); declare old_name varchar(20);-- 新姓名 declare new_name varchar(20);-- 旧姓名 set old_name=old.aname; set new_name=new.aname; set info=concat('oldname:',old_name,'newname:',new_name); insert into log values(0,info); end update A set aname='zhangsan' where aid=1 select * from log; --删除员工前 把编号和姓名存入log 表中 create trigger tr_emp_delete before delete on A for each row begin declare info varchar(200); declare bh char(4); declare xm char(20); set bh=old.aid; set xm=old.aname; set info =concat('bianhao',bh,'xingming',xm); insert into log values(0,info); end delete from A where aid=3 --添加 数据前,判断员工编号是否已经存在,若不存在进行添加事件 create trigger tr_emp_insert before insert on A for each row begin declare c int; declare bh char(4); set bh = new.aid; set c = (select count(*) from emp where aid=bh); if c > 0 then signal sqlstate 'TX000' set message_text='员工编号已存在'; end if; end

浙公网安备 33010602011771号