开发者学堂课程【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 文件。右击,选择 编辑(触发器),看到如下图界面,
可以进行编辑,也可以快速的调整触发时机、事件等操作。通过可视化,可少写很多代码。
四、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
点击页面下方的保存按钮,看到确认对话框
确认无误,点击确定。提示执行失败,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 的相关对象。

