mySQL教程 第9章 触发器

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

第9章 触发器

入的新数据放到new表,删除的数据放到old表。

准备本章学习环境

连接数据库schoolDB,删除表TStudent,TScore和Tsubject中的所有数据。

delete from TStudent;

delete from TScore;

delete from TSubject;

向学生表插入两条记录

insert TStudent (StudentID,Sname,sex,Class)

values ('00001','张作霖','男','JAVA'),

('00002','汤二虎','男','NET')

向课程表插入3条记录

insert into TSubject values

('0001','计算机网络','奠基计算机网络','清华出版社'),

('0002','数据结构','大话数据结构','人邮出版社'),

('0003','JAVA开发','JAVA企业级开发','人邮出版社')

clip_image001

创建插入触发器

1. 练习:创建插入触发器

查看表TStudent中的记录,你发现没有录入时间enterTime,也没有邮箱Email。

select * from TStudent

clip_image002

下面创建触发器,在TStudent表中插入记录时,使用触发器插入录入时间即enterTime和邮箱即Email。

创建触发器

CREATE TRIGGER autoTimeAndEmail

BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

SET NEW.enterTime=NOW();

SET NEW.Email=concat(PINYIN(NEW.sname),'@hotmail.com');

END

插入两条记录测试触发器是否工作。

insert TStudent (StudentID,Sname,sex,Class)

values ('00003','张左相','男','JAVA'),

('00004','张四非','男','NET')

clip_image003

查看新插入的记录,发现已经由触发器插入了用户邮箱和录入时间

select * from TStudent

clip_image004

2. 练习:使用触发器实现数据插入跟踪

使用触发器实现对TStudent表数据插入的跟踪,将跟踪事件记录到一张审计表中review。

一张表不能同时有多个插入触发器

Drop TRIGGER autoTimeAndEmail

创建记录跟踪的审计表

create table review

(

username varchar(20),

act VARCHAR(10),

studentID varchar(10),

sname VARCHAR(10),

actTime TIMESTAMP

)

创建触发器,该触发器向insertReview表中记录

CREATE TRIGGER insertReview BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'insert',NEW.studentID,NEW.sname,NOW());

END

在Tstudent表插入一条记录

INSERT `TStudent` (studentid,sname,sex,class) VALUES ('00005','王严明','男','NET')

查看review表是否记录了

select * from review

可以看到已经记录下那个用户什么时间插入了一条记录

clip_image005

3. 练习:创建update触发器

在TStudent表上创建触发器,在review表中记录更改学生的学号和更改前的姓名。

CREATE TRIGGER updateReview BEFORE UPDATE on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'update',NEW.studentID,old.sname,NOW());

END

查看学号是00005的学生姓名

select * from `TStudent` where studentID='00005'

clip_image006

UPDATE `TStudent` SET sname='冯国彰' where studentID='00005'

查看是否记录

select * from `review`

clip_image007

4. 练习:创建删除触发器

该触发器能够记录TStudent表的删除事件到review表

CREATE TRIGGER deleteReview BEFORE DELETE on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'delete',old.studentID,old.sname,NOW());

END

删除二条记录

delete from `TStudent` where studentID='00002'

select * from review

clip_image008

5. 练习:在触发器中使用异常回滚操作

MySQL的触发器中不支持rollback和 commit,也就是说如果出现异常,没有办法回滚。解决办法是,如果打算回滚更改,人为产生异常。

创建触发器,限定TStudent表sex列只能输入‘男’或‘女’。如果是其他值,取消插入操作。

注意红色部分是故意产生的错误,因为没有定义E001,这样会自动取消插入。

CREATE TRIGGER limitSex BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

declare M_ERRMSG varchar(10);

if NEW.sex='男' or NEW.sex='女' then

set M_ERRMSG='插入成功';

else select E001 INTO M_ERRMSG;

end if;

END

插入记录,其中一条性别是错误的

insert TStudent (StudentID,Sname,sex,Class)

values ('00005','冯国章','男','JAVA'),

('00006','牛万鹏','南','NET')

可以看到插入失败

clip_image009

查看是否插入了两条,可以看到一条也没插入成功。

clip_image010

直插入一条正确的

insert TStudent (StudentID,Sname,sex,Class) values ('00005','冯国章','男','JAVA')

可以看到插入成功

clip_image011

6. 练习:查看创建的触发器

双击表,在Triggers标签下,可以看到表上的触发器

clip_image012

在以下图中也可以看到创建的触发器

clip_image013

7. 练习:查看触发器的定义

clip_image014

8. 练习:使用SHOW TRIGGERS显示触发器;

SHOW TRIGGERS;

clip_image015

clip_image016

9. 练习:查看所有数据定义的触发器

连接到Information_schema数据库,输入以下命令查看所有触发器

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

clip_image017

clip_image018

10. 练习:删除触发器

删除触发器,触发器名字区分大小写。

drop trigger limitSex




本文转自 onesthan 51CTO博客,原文链接:http://blog.51cto.com/91xueit/1137982,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4小时前
|
存储 关系型数据库 MySQL
mysql安装教程mac
【4月更文挑战第21天】
|
4小时前
|
关系型数据库 MySQL 网络安全
|
4小时前
|
关系型数据库 MySQL 数据处理
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
|
4小时前
|
SQL 存储 关系型数据库
轻松入门MySQL:简明教程解析数据存储与管理(1)
轻松入门MySQL:简明教程解析数据存储与管理(1)
|
4小时前
|
SQL 关系型数据库 MySQL
MySQL最新版8.1.0安装配置教程
本文章,是对自己在安装最新版MySQL最新版8.1.0安装配置的一个详细过程吧,中间也有很多不清楚的地方,但是经过自己的多次对,工具环境以及软件环境的配置,现在对于这个的安装也算得心应手吧,不仅仅是一种总结,更是对自己经验的一种积累.
|
4小时前
|
存储 安全 关系型数据库
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
|
4小时前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
4小时前
|
安全 关系型数据库 MySQL
MySQL安装教程
MySQL安装教程
32 0
|
4小时前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
|
4小时前
|
关系型数据库 MySQL 数据库
【MySQL】:超详细MySQL完整安装和配置教程
【MySQL】:超详细MySQL完整安装和配置教程
316 1