Mysql触发器学习
1.创建准备数据
--1.创建准备数据库 --drop database if exists edw; create database if not exists edw; alter database edw default character SET utf8 COLLATE utf8_general_ci;
2.创建学生和学生成绩表
use edw; --创建学生表 drop table if exists ods_stu_entity; create table if not exists ods_stu_entity( id int primary key auto_increment, stu_id varchar(64) comment '学号' unique, name varchar(64) comment '姓名', sex varchar(16) comment '性别' default '男', age int comment '年龄' check(id>0 and id<150), grade varchar(16) comment '年级' , address varchar(64) comment '家庭地址' )ENGINE=InnoDB default CHARSET=utf8; --创建学生成绩表 drop table if exists ods_stu_score; create table if not exists ods_stu_score( id int primary key auto_increment, stu_id varchar(64) comment '学号' unique, name varchar(64) comment '姓名', grade varchar(16) comment '年级' , chinese float comment '语文成绩' default 0, math float comment '数学成绩' default 0, english float comment '英语成绩' default 0 )ENGINE=InnoDB default CHARSET=utf8;
3.创建触发器
功能:当插入学生表数据后,自动在成绩表中插入数据
--触发器 --当插入学生信息之后,触发器往成绩表中插入数据 drop trigger if exists trigger_ods_stu_score; create trigger trigger_stu_score after insert on ods_stu_entity for each row begin insert into ods_stu_score (stu_id,name,grade) values (new.stu_id,new.name,new.grade); end;
4.测试验证结果
--测试插入一条学生数据 insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510016','Jim','男','27','大一','江西省上饶市婺源县'); insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510017','Jack','男','26','大一','浙江省杭州市西湖区'); insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510018','Lucy','女','25','大一','辽宁省大连市沙河口区'); --查看学生表 select * from ods_stu_entity; --查看成绩表中是否有数据 select * from ods_stu_score;
学生表结果:
成绩表结果:
创建触发器一个执行语句格式:
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;
创建触发器多个执行语句格式:
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END;
触发器执行顺序
- 如果 BEFORE 触发器执行失败,SQL 无法正确执行;
- SQL 执行失败时,AFTER 型触发器不会触发;
- AFTER 类型的触发器执行失败,SQL 会回滚;