MySQL 之触发器|学习笔记

简介: 快速学习 MySQL 之触发器

开发者学堂课程【MySQL 实操课程MySQL 之触发器】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/717/detail/12812


MySQL 之触发器

 

目录:

一、触发器

二、MySQL 创建触发器

三、创建触发器实例

四、MySQL 测试触发器

五、总结

 

一、触发器

1、什么是触发器?

触发器简单来说,是用来监视某个表的增、删、改操作。如:

insert、update、delete 等操作。当发生这些操作的时候,就需要完成一些其他的工作,捕获这些事件。

2、触发器有三种触发事件:

(1) insert 操作,插入事件

(2) Update 操作,修改事件

(3) Delete 操作,删除事件

这三种操作的具体触发时间分为执行操作前和执行操作后触发。可在对应操作的执行前后做相关设置。

 

二、MySQL 创建触发器

1、触发器是在满足定义条件时触发,并执行触发器中定义的语句集合。可协助应用在数据库端确保数据的完整性。

2、准备工作:创建两个表,表名不一样,表结构都-样。

3、创建一个触发器,当 book 表有新数据插入的时候,同步插入到 book_ bak 表,实现 book 表数据的备份。

 

三、创建触发器实例

1、分别创建两个表。打开命令窗口编辑程序:

(1)创建 book 表。

create table book(book_id int(4),title varchar(50),

description varchar(500));

执行。结果显示执行成功。

点击页面的左侧边栏的 表 ,刷新。看到新增了 book 表文件。

(2)创建 book 备份表

create table book_bak(book_id int(4),title vercher(50),

deseription varchar(500));

执行。结果显示执行成功。

点击页面的左侧边栏的 表 ,刷新。看到新增了 book_bak 表文件。

2、创建触发器。

触发器的关键词是 trigger,触发 insert 操作。

delimiter $$

create trigger book_after_insert_trg

after insert on book for each row begin

insert into book_bak(book_id,title,description)

values (new.book_id,new.title ,new.description);

end

$$

上程序段语法:

① create trigger 为关键词;

② book_after_insert_trg 是 trigger 的名称;

③ after insert 是当执行 insert 操作后会触发触发器;

④ on book 是在 book 表上;

⑤ for each row begin……end 在 book 表中的每一行一旦启用就开始触发拜访。

⑥ insert into book_bak(book_id,title,description) 插入 book 表中对应的值到备份表中

⑦ Values(new.book_id ……)这里的 new 指当前插入到 book 表中的数据,使用 new 作为对象,把 book 里的 id、title、description 依次插入进来。

执行。结果显示执行成功。

点击页面的左侧边栏的 可编程对象 ,刷新。看到触发器目录下新增了book_after_insert_trg 文件。右击,选择 编辑(触发器),看到如下图界面,

图片1.png

可以进行编辑,也可以快速的调整触发时机、事件等操作。通过可视化,可少写很多代码。

 

四、MySQL 测试触发器

1、往表 book 中插入一条数据,观察是否被同步插入到 book_bak。经观察发现,数据已经同步到 book_bak 表中。

(1)打开命令窗口,查询 book 表

select * from book;

执行后显示结果为

mysql>select * from book;

book_id  title  description

返回行数:[0],耗时:6 ms

(2)查询 book_bak 表

select * from book_bak;

执行后显示结果为

mysql>select * from book;

book_id  title  description

返回行数:[0],耗时:6 ms

可以看出 book_bak 里面没有任何东西。

(3)给 book 表里插入数据

insert into book values(1001,’MySQL’,‘MySQL is a database software’);

执行。提示有语法错误。符号错误。单引号应为英文状态下“”,重新编辑后执行。提示执行成功。

(4)再查询 book 表和 book_bak 表

select * from book;

执行后显示结果为

mysql>select * from book;

book_id  title   description

1001     MySQL    MySQL is a database software

返回行数:[1],耗时:[58 ms]

查询 Book_bak 表与 book 表一样同步了对应的内容。这就是创建的 insert 触发器,到这里就生效了。

2、创建 delete 操作

(1)可视化界面创建 delete 操作

在root@rm-wz9c2e2q42u426f3z 页面,左侧的侧边栏里右击触发器,选择 新建(触发器),创建 delete 操作。

编辑触发器名称为 book_after_delete_trg,触发表为 book,触发时机为 AFTER,事件为 DELETE。

触发器语句编辑:

begin

delete from book_bak where book_id=new.book_id

end

点击页面下方的保存按钮,看到确认对话框

图片2.png

确认无误,点击确定。提示执行失败,There is no NEW row in on DELETE trigger。

修改

begin

delete from book_bak where book_id=book.book_id;

end

点击保存,确认,提示 Trigger book_after_delete_trg 创建成功。

(2)测试查询

DMS- 数据管理服务页面中的命令窗口里查询

delete from book where book_id=1001;

执行提示找不到 book_id。点击左侧边栏里的可编程对象目录下的触发器,右击book_after_delete_trg,选择 编辑(触发器),将触发语句

begin

delete from book_bak where book_id=book.book_id;

end

程序段修改为

begin

delete from book_bak where book_id=old.book_id;

end

点击保存,直接执行。再打开命令窗口查询 book 和 book_bak

select * from book;

执行结果为

mysql>select * from book;

book_id  title   description

1001     MySQL    MySQL is a database software

返回行数:[1],耗时:[57ms]

查询 Book_bak 表与 book 表一样。

再查询 delete from book where book_id=1001;

执行,看到结果执行成功。再次查询

select * from book;

select * from book_bak;

执行,看到结果显示 book_id、title、description 都没有相应内容。

这就两种方式创建触发器。一种是从脚本里创建,另一种是从可视化窗口创建。

(3)可视化的方式需要注意:

delete 触发器的触发语句

begin

delete from book_bak where book_id=old.book_id;

end

因为用 delete,所以用 old,old 的这个关键字代表之前的记录。

而 insert 触发器的触发语句

begin

insert into book_bak(book d,title,description)

values (new.book_id,new.title,new.description);

end

其中,insert 是新的一行,所以用 new 来表示,这是他们之间的差别。

 

五、总结

本次课程主要学习了 MySQL 之函数MySQL 之存储过程MySQL 之触发器三部分内容。

1、MySQL 之函数主要学习 MySQL 的系统函数、怎样调用系统函数、每个系统函数代表什么意思、能解决什么问题等。包括常用的字符串处理函数、数学函数等。

2、MySQL 之存储过程主要学习存储过程,包括它的应用。通过入参部门编号来查询部门对应的人数。

3、MySQL 之触发器学习了完整的案例演示,创建两个表,通过触发器去实现两个表之间数据的同步。演示的 insert 和 delete 操作。课后可以自己去实验 update 的操作。创建触发器也通过两种方式演示,一种是直接通过阿里云客户端的工具DMS 去创建触发器脚本。另一中方式是通过阿里云可视化工具直接创建触发器相关名称、时机等内容。

通过阿里云的 DMS 这样的管理平台,能更加方便的、直观的去管理 MySQL 的相关对象。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
735 81
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
359 6
|
11月前
|
监控 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
408 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
243 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
206 1
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
203 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
600 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
存储 安全 关系型数据库
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。

热门文章

最新文章

推荐镜像

更多