触发器:
mysql中的触发器类似于js中的事件.事先为某张表绑定好一段代码,
当表中的某些内容发生改变的时候(增删改)系统会自动触发代码执行
1.触发器的关键字: trigger
2.触发器的类型: insert delete update
3.触发器的触发时间: before after
4.触发器的对象: 表中的每一行记录
5.一张表中最多有6个触发器: 这是由触发类型和触发时间决定的
6.触发器是自动触发的
7.触发记录:
不管触发器是否触发了,只要当某种操作准备执行,
系统就会将当前要操作的记录的当前状态和即将执行之后的状态给分别保留下来,供触发器使用;
要操作的当前状态保存到old中,操作之后的可能形态保存给new.
8.触发器记录中old和new关键字代表:
old: 旧记录 new 新记录
删除的时候没有new 插入的时候没有old
9.触发器的优点和缺点:
优点: 可以很好的协调表内部的数据处理顺序和关系
缺点: 触发器会增加数据库维护的难度,尽量少用
(1)作用: 多张相关联的表,达到数据同步
(2)操作表 被操作表
我们为操作表添加触发器,当我们为操作表进行更新时(增删改),达到某个条件时,就会触发事件(sql语句集)并执行事件.
创建触发器
delimiter ;;
create trigger 触发器名称
after/before (触发器工作的时机)
update/delete/insert (触发器监听事件)
on 表名 (触发器监听的目标表)
for each row (行级监视,mysql固定写法,oracle不同)
begin
sql语句集........(触发器执行动作,分号结尾)
end ;; 结束限定符
(3)删除触发器: drop trigger if exist 触发器名称
(4)查询数据库触发器:show triggers;
1.在终端建库建表
<!--建库-->
create database if not exists has character set utf8 collate utf8_general_ci;
character set utf8: 字符集
collate utf8_general_ci:校队集
<!--建表-->
<!--操作表-->
create table if not exists depart
(id Integer primary key auto_increment,
name varchar(20))charset=utf8;
<!--被操作表-->
create table if not exists person
(id Integer primary key auto_increment,
name varchar(20),
departname varchar(30))charset =utf8;
2.监听器监听:update
delimiter ;;
create trigger zs
after
update
on depart
for each row
begin
update person set departname = NEW.name where departname = OLD.name;
end ;;
delimiter ;
update depart set name = '佛香阁' where name = '青云门';
2.监听器监听:delete
delimiter ;;
create trigger zz
after
delete
on depart
for each row
begin
update person set departname = NULL where departname = OLD.name;
end ;;
delimiter ;
delete from depart where name = '佛香阁';
3.监听器监听:insert
delimiter ;;
create trigger ss
after
insert
on depart
for each row
begin
update set departName = NEW.name where departname is NULL;
end ;;
delimiter ;
insert into depart (name) values ('天下会');