mySQL教程 第9章 触发器

第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,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掩码图制作photoshop__新手用

1.首先你得有一张图,比如这样的: 2.用PS打开他 3.左边工具栏里(快速选择工具W),选想显示的部分 4.ctrlc复制一下,新建一张黑底图粘贴上去或者白底图时选中显示区即花瓣右键反向右键填充成黑色 5.菜单栏->…

Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现

大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌。这期我们继续实现接下来的功能--叫地主。 1.首先这两天,学习了DOTween,这是一个强大的Unity动画插件,大家可以参考&#…

Koa 中实现 chunked 数据传输

有关于 Transfer-Encoding:chunked 类型的响应,参见之前的文章HTTP 响应的分块传输。这里看 Koa 中如何实现。 Koa 中请求返回的处理 虽然官方文档有描述说明不建议直接调用 response.write: Bypassing Koas response handling is not supported. Avoid …

HTML5新特性之Mutation Observer

Mutation Observer(变动观察器)是监视DOM变动的接口。当DOM对象树发生任何变动时,Mutation Observer会得到通知。 要概念上,它很接近事件。可以理解为,当DOM发生变动会触发Mutation Observer事件。但是,它与…

Python操作MongoDB - 极简教程

2019独角兽企业重金招聘Python工程师标准>>> Python 连接 MongoDB 安装PyMongo模块 pip install pymongo使用MongoClient建立连接 from pymongo import MongoClient # 以下为三种建立连接的方式 #client MongoClient() #client MongoClient(localhost, 27017) #cl…

java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)

此小程序的功能主要是采用异步请求方式从数据库中调取省市区信息显示到下拉列表:代码如下:建立数据库中的代码和一些配置文件信息就省略了,主要有JavaScript中的代码为:$(document).ready(function(){$.get("getProvince.do&…

20155305乔磊2016-2017-2《Java程序设计》第四周学习总结

20155305乔磊2016-2017-2《Java程序设计》第四周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为。面向对象中,子类继承父类,就是把程序中相同的代码部分提升为父类。extends关键字,表示前者会扩充后者的行为&#xff…

【eclipse转idea的第一天】配置idea

为什么80%的码农都做不了架构师?>>> 导入maven项目 设置maven(全局) 为了不然才转idea的码友们重复我犯过的错,我这儿截图步骤说明下: 这里是列表文本这里是列表文本idea的设置有两种:全局,局部(我这么叫的…

Vmware 安装虚拟工具 (二)

打开虚拟机,以root超级用户登陆,菜单栏选择虚拟机,install安装虚拟机 拷贝虚拟工具到 在根目录下建立文件夹,并将工具拷贝到该文件夹,例如vmtool 打开终端,进入该目录开始安装 如图,进入目录解压…

git与svn的区别 ?Git 与 SVN那个更好?

git与svn的区别 : http://www.360doc.com/content/12/1228/20/11220452_256857021.shtml 在版本控制系统的选型上,是选择Git还是SVN? 对于开源项目来说这不算问题。使用Git极大地提高了开发效率、扩大了开源项目的参与度、 增强了版本控制系统…

利用Arcgis for javascript API绘制GeoJSON并同时弹出多个Popup

1.引言 由于Arcgis for javascript API不可以绘制Geojson,并且提供的Popup一般只可以弹出一个,在很多专题图制作中,会遇到不少的麻烦。因此本文结合了两个现有的Arcgis for javascript API扩充库,对其进行改造达到绘制Geojson并同…

HBase数据备份及恢复(导入导出)的常用方法

一、说明 随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业(数据)资产。备份Hbase时的难点是其待备份的数据集可能非常巨大,因此备份方案必须有很高的…

Android商城开发系列(二)——App启动欢迎页面制作

商城APP一般都会在应用启动时有一个欢迎界面,下面我们来实现一个最简单的欢迎页开发:就是打开商城App,先出现欢迎界面,停留几秒钟,自动进入应用程序的主界面。 首先先定义WelcomeActivity布局,布局非常简单…

DELL安装不了mysql_Windows 版本 Mysql 8.x 安装

1、官网下载安装包百度网盘链接:https://pan.baidu.com/s/1cFRbQM5720xrzMxbgjPeyA提取码:xlz72、解压安装包并新建一个文件夹作为安装目录(mysqlInstall)3、配置 Mysql 环境变量4、在解压好的目录下新建一个 my.ini 文件(注意:my.ini 文件和…

Hyper-V Server联机调整虚拟硬盘大小

1. 技术概述: 从 Windows Server 2012 R2开始,管理员可以在运行虚拟机的同时,使用 Hyper-V 来扩展或压缩虚拟硬盘的大小。存储管理员可以通过对运行中的虚拟硬盘执行维护操作来避免代价不菲的停机。不再需要关闭虚拟机,这可以避免…

python网络爬虫(5)BeautifulSoup的使用示范

创建并显示原始内容 其中的lxml第三方解释器加快解析速度 import bs4 from bs4 import BeautifulSoup html_str """ <html><head><title>The Dormouses story</title></head> <body> <p class"title"><…

物联网笔记

转载于:https://www.cnblogs.com/16-C-kai/p/6596682.html

关于大学生玩网络游戏的调查问卷

1.创建问卷&#xff0c;输入调查名称 2编辑问卷 3检查问卷&#xff0c;是否有误 4.提交并发布问卷 5分享问卷 6.问卷分析 转载于:https://www.cnblogs.com/dzw1996/p/7786754.html

第六次 实验

转载于:https://www.cnblogs.com/P201821440005/p/10967987.html

du命令、df命令用法

一、du命令 [plain] view plaincopy print?[rootwc1 mysql]# du --help Usage: du [OPTION]... [FILE]... or: du [OPTION]... --files0-fromF Summarize disk usage of each FILE, recursively for directories. Mandatory arguments to long options are mandatory…