mySQL教程 第9章 触发器

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

第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,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
265
分享
相关文章
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
240 3
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
248 26
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
135 20
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
166 0
【入门级教程】MySQL:从零开始的数据库之旅
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
MySQL 中的触发器数量之谜
【8月更文挑战第31天】
117 0
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等