触发器概念
触发器是一种特殊类型的存储过程,在插入,删除和修改表中数据时被触发执行。
触发时机
Before和After两种
触发条件
Insert ,delete , update
总结:所以在一个表上最多可以建立6个触发器,即:
1. before insert型(插入数据之前触发)
2. before update型(更新数据之前)
3. before delete型
4. after insert 型
5. after update型
6. after delete型。
并且不能在同一个表中建立两个类型完全相同的触发器。
触发器语法
create trigger 触发器名称
after/before insert/update/delete on 表名
for each row
begin
sql语句
end
在触发器中引用行值
触发事件 引用对象 表示方法
insert 新增的行 new.列名
delete 删除的行 old.列名
update 更新前的行 old.列名
update 更新后的行 new.列名
触发器例子
- 插入触发器例子
例子说明: 因为每位员工入职后都应该有对应的薪资,所以适合使用触发器来完成
//员工表建表语句
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
`pass` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
//薪水表
CREATE TABLE `saraly` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(10) unsigned NOT NULL,
`saraly` decimal(18,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
//建立触发器
mysql> \d $
mysql> create trigger user_add_saraly after insert
-> on user for each row
-> begin
-> insert into saraly(uid,saraly) values(new.id,50000);
-> end
-> $
//当给user表插入一条的数据时,saraly表也会多一条数据
mysql> insert into user(name,pass) values('rest',md5('234111'));
例子2: 员工离职后,需要删除员工信息与薪资信息。这个时候就可以使用到触发器
mysql> \d $
mysql> create trigger user_del_saraly after delete
-> on user for each row
-> begin
-> delete from saraly where uid = old.id;
-> end
-> $
//当删除user表数据,saraly表数据也会删除 mysql> delte from user where id = 6;
触发器管理
删除触发器
不再需要的触发器必须删除,否则触发器可能会在符合条件时被执行。
drop trigger 触发器名字
查看所有触发器
show trigger