MySql学习笔记——触发器
今天又学习了一下mysql触发器的相关知识,对此做了一些笔记和总结。
定义及作用
触发器是一个被指定关联到一个表的数据对象,触发器不需要调用,当对一个表的特别事件出现时,它就会被激活。触发器的代码也是由声明式和过程式SQL语句组成,因此用在存储过程中的语句也可以用在触发器的定义中。
触发器的作用如下:
- 触发器与表的关系密切,用于保护表中的数据。
- 利用触发器可以方便的实现数据库中数据的完整性。
创建触发器
创建触发器使用CREATE TRIGGER语句,若要查看数据库中的触发器,可以使用SHOW TRIGGERS命令。
创建触发器的语法格式如下:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb1_name FOR EACH ROW trigger_stmt
说明:
trigger_name:触发器的名称,触发器在当前的数据库中必须具有唯一的名称,如果要在某个特定的数据库中创建,名称前面要加上数据库的名称。
trigger_time:触发器触发的时刻,有两个选项:AFTER和BEFORE,以代表触发器是在激活它的语句之前或之后触发。如果想要在激活触发器的语句执行之后执行几个或更多的改变,通常使用AFTER选项;如果想要验证新数据是否满足使用的限制,则使用BEFORE选项。
trigger_event:触发事件,指明了激活触发程序的语句类型。触发事件可以是以下情况:
INSERT:将新行插入表时激活触发器。例如,通过INSERT,LOAD DATA和REPLACE语句。
UPDATE:更改某行数据时激活触发器。例如,通过UPDATE语句。
DALETE:从表中删除一行时激活触发器。例如。通过DELETE和REPLACE语句。tb1_name:与触发器相关的表名,在该表上发生触发事件时才会激活触发器。同一个表中不能拥有两个具有相同触发时刻和事件的触发器。
FOR EACH ROW:这个声明用来指定,对于受触发事件影响的每一行都要激活触发器的动作。
trigger_stmt:触发器动作,包含触发器激活时将要执行的语句。如果要执行多个语句,可以使用BEGIN...END复合语句结构。这样,就能使用存储过程允许的相同语句。
一张表中最多可以创建6个触发器,时间(BEFORE,AFTER)对类型(INSERT、UPDATE、DELETE)。
注意:触发器不能返回任何的结果到客户端,为了阻止从触发器返回结果,还要在触发器定义中包含SELECT语句。同样,也不能调用将数据返回客户端的存储过程。
例子:在user表中新增一条数据时,同时在与之关联的另外一张表中插入一条数据。
delimiter $$
create trigger useupdate after insert on user for each row
begin
insert into questionnaire values(1,'1','1',1);
end $$
delimiter ;
insert into user values (19,'aa','bb','cc','dd','ff');
结果如图:


删除触发器
语法格式:
DROP TRIGGER [schema_name]trigger_name
说明:
- trigger_name:指要删除的触发器名称。
- schema_name为所在数据库的名称,如果是当前数据库,可以省略。
例子:
drop trigger useupdate;
修改触发器
不能直接修改触发器,要先删除后新增。
触发器记录
不管是否触发,只要当某种操作准备执行,系统就会将当前要操作的记录的当前状态和即将执行之后新的状态分别保留下来,供触发器使用。其中,操作的当前状态保存到old中,操作之后的新状态保存到new中。
- old代表旧记录,new 代表新记录;
- 删除之后没有new的,插入的时候没有old。
- old和new 代表记录本身。
- 对于INSERT语句,只有NEW 是合法的;对于DELETE语句,只有old才合法;而UPDATE语句可以与NEW和OLD同时使用。
使用方式:
old.字段名/new.字段名。
例子:删除一个用户时,同时删除与用户关联的另外一张表中的信息。由于删除用户时,用户的id可以已经删除了,所以使用old。
delimiter $$
create trigger userdelete after delete on user for each row
begin
delete from questionnaire where id = old.id;
end $$
delimiter ;
delete from user where id = '19';
我只添加了一条数据用于演示,所以执行完后,数据是空的。

总结
其实,触发器很好理解,就是在一个动作发生时,又有另一个动作在发生,只是时机有所不同。
MySql学习笔记——触发器的更多相关文章
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- MySQL学习笔记-MySQL体系结构总览
MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...
- 【mysql学习笔记整理】
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...
- 一千行MySQL学习笔记 (转)
出处: 一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...
- mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记
mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
随机推荐
- linux内核分析第3章&第18章读书笔记
linux内核分析第3章&第18章读书笔记 第三章 进程管理 进程:处于执行期的程序(目标码存放在某种存储介质上) 包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态, ...
- HDU1863畅通工程---并查集+最小生成树
#include<cstdio> #include<algorithm> #define MAX 105 struct edge { int from,to; long lon ...
- linux swap交换分区配置
参考 http://commandos.blog.51cto.com/154976/115288/
- 【数论】数论进阶-Preknowledge
数论进阶-Preknowledge 参考资料:洛谷网校2018夏季省选基础班SX-3数论进阶课程及课件 一.整除与取整除法 1.1 定义 1.整除 \(\forall~x,y~\in~Z^+,\) 若 ...
- windows使用composer.phar
把composer.phar复制到php安装目录下, 新建一个composer.bat文件,编辑 @php "%~dp0composer.phar" %* 保存,然后就可以使用co ...
- STL源码分析-function
http://note.youdao.com/noteshare?id=269e16541b43095eaf97636d4e046b1d
- 手脱nSPack 2.1 - 2.5
1.载入PEID 使用核心扫描出的结果 nSPack 2.1 - 2.5 -> North Star/Liu Xing Ping 2.载入OD,一进来就是一个大跳转,F8跟着走 >- E9 ...
- 小程序navigatorTo缺点和修正方法
1.不好带参数跳转到tabbar,即下部的导航栏目. reLauntch方法可以传递参数到导航栏目: go_to_prolist: function (e) { var datatype = e.cu ...
- jeecms上传文件限制导致413-Request Entity Too Large
1:spring mvc 上传限制大小 配置是否允许在上传文件的大小 <bean id="multipartResolver" class="org.spring ...
- 基于packstack的openstack单节点安装
一.安装源处理 1.更新base源为网易的源 cd /etc/yum.repos.d/ wget http://mirrors.163.com/.help/CentOS6-Base-163.repo ...