mysql触发器 学习
1. 说明:
触发器的定义就是说某个条件成立的时候,你触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好的了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。
2. 触发器作用:
安全性;审计;实现复杂的数据完整性规则;实现复杂的非标准的数据库相关完整性规则;同步实时地复制表中的数据
3. 语法结构:
create trigger trigger_name (BEFORE|AFTER) (delete|update|insert) on table_name
for each row
BEGIN
要触发的sql语句;
END;;
4. 例子1:
DELIMITER ;; 定义sql命令结束符
/*
drop trigger D1;; 删除触发器
drop trigger D1;;
*/
create trigger D1 BEFORE delete on employee
for each row 表示行级触发器
BEGIN
insert into tg_employee_log set name=old.name,name_id=old.employee_id,action='delete';
update tg_assets_info set as_status='2',user=205 where user=old.employee_id;
END;;
表示在删除employee里的数据之前,在tg_employee_log表里面插入一条数据,并且更新tg_assets表的数据。
注意:这里用到的old.employee_id,表示删除之前的数据。
5. 例子2:
create trigger D2 AFTER insert on employee
for each row
BEGIN
insert into tg_employee_log set name=new.name,name_id=new.employee_id,action='add';
END;;
表示在employee插入之后,在tg_employee_log表里插入一条数据。
注意:这里用到了new.employee_id,表示插入之后产生的新数据。
DELIMITER ;
create trigger trigger_name (BEFOFE|AFTER) (delete|update|insert) on table_name for each row BEGIN 要解发的sql语句 END;; CREATE TRIGGER `tb_trigger_insert` AFTER INSERT ON `tb_trigger` FOR EACH ROW INSERT INTO `tb_trigger_log` SET `action` = 'insert',`actionid` = new.id; CREATE TRIGGER `delete_tb_sys_template_source` BEFORE DELETE ON `tb_sys_template` FOR EACH ROW DELETE FROM `tb_sys_template_source` WHERE `templateid`=old.id; CREATE TRIGGER `delete_tb_sys_template_source` BEFORE DELETE ON `tb_sys_template` FOR EACH ROW DELETE FROM `tb_sys_template_source` WHERE `templateid` = old.id;