触发器概念
trigger,一个特殊的存储过程。与表事件相关,达到指定条件(之前或者之后)而自动执行。
触发器的作用
1、数据操作前进行校验或者修改;
2、记录数据操作记录,保证数据的完整性。
触发器要素
触发事件:新增(insert)、删除(delete)、更新(update);
触发时间:指定触发器在触发事件之前( before)或者之后(after)执行;
触发对象:表中每一行(each row)记录。
具体演示(仅仅以新增为例,删除和更新创建触发器类似)
1、建表(之前我把表删了),添加一条数据
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR (64) NOT NULL,
`age` INT NOT NULL,
`phone` CHAR (11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
2、创建一个新增(insert)操作之前的触发器,校验age
create trigger 触发器名称 触发时间 触发事件 on 表名 for each row 触发器程序
DELIMITER ;; -- 临时修改结束符号(;;),可以自定义
create trigger tri_before_insert before insert
on user
for each row
begin
if new.age <=0 then
signal sqlstate 'S0001' set message_text = 'age应该大于0' ;
end if;
end;;
DELIMITER ;--将结束符号修改成英文分号(;)
3、新建一张操作记录表
create table if not exists `user_oper_record`(
`id` int not null auto_increment,
`user_id` int not null,
`oper_type` char(1) not null,
`oper_time` datetime not null,
`name` varchar(64) not null,
`age` int not null,
`phone` char(11) not null,
primary key (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
4、创建一个user表新增(insert)操作后的触发器,记录操作记录
DELIMITER ##
create trigger tri_after_insert after insert
on user
for each row
begin
insert into user_oper_record(id, user_id, oper_type, oper_time, name, age, phone) values (null, new.id, '1', now(), new.name, new.age, new.phone);
end##
DELIMITER ;
5、查看触发器
show triggers;
show triggers\G
6、删除触发器
drop trigger 触发器名称;
如果有写的不对的地方,请大家多多批评指正,非常感谢!