MySQL数据库-MySQL触发器

对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

1、创建触发器基本语法

TRIGGER触发器
BEFORE之前
AFTER之后
INSERT插入
DELETE删除
UPDATE更新

# 插入前
-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) INSERT(插入) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 插入后
-- CREATE(创建) TRIGGER(触发器) 触发器名称 AFTER(之后) INSERT(插入) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 删除前
-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) DELETE(删除) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 删除后
-- CREATE(创建) TRIGGER(触发器) 触发器名称 AFTER(之后) DELETE(删除) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新前
-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) UPDATE(更新) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新后
-- CREATE(创建) TRIGGER(触发器) 触发器名称 AFTER(之后) UPDATE(更新) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束)
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END

2、实列,创建一张表插入之前的触发器

当向指定的一张表插入一条数据时,触发器自动向另外一张表插入一条数据

有这样两个表

usr表

jif表

创建一个触发器,当向usr表插入一条数据之前,触发器自动向jif表插入一条数据

# 插入前
-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) INSERT(插入) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束) delimiter $$ -- 因为可能有多条触发行为,所有需要修改语句结束符
DROP TRIGGER if EXISTS chufa_qi_usr; -- 判断这个触发器如果存在删除 CREATE TRIGGER chufa_qi_usr BEFORE INSERT ON usr FOR EACH ROW -- 给usr表创建一个插入数据之前的触发器
BEGIN
INSERT INTO jif (jif) VALUES (''); -- 向jif表的jif字段插入值123
END $$
delimiter ;

 可以看到usr表的触发器已经创建

当向usr表插入一条数据之前,触发器会自动向jif表的jif字段插入一条数据

INSERT INTO usr (yhm,xb,nl) VALUES ('张无忌','男',''); -- 向usr表插入数据

 注意:其他的、增、删、改、之前或者之后触发器原理相同

3、在触发器里获取到,触发器表指定字段的插入值

NEW获取触发器表指定字段的插入值,后面跟要获取值的字段名称,如:NEW.nl

获取触发器表指定字段的插入值,可以做判断和传值写入等操作

举例:判断触发表插入数据时,如果nl字段值等于30将nl字段值写入另外一张表

-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) INSERT(插入) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束) delimiter $$ -- 因为可能有多条触发行为,所有需要修改语句结束符
DROP TRIGGER if EXISTS chufa_qi_usr; -- 判断这个触发器如果存在删除 CREATE TRIGGER chufa_qi_usr BEFORE INSERT ON usr FOR EACH ROW -- 给usr表创建一个插入数据之前的触发器
BEGIN
IF NEW.nl = '' THEN -- 判断插入数据时触发表的nl字段的值如果等于30
INSERT INTO jif (jif) VALUES (NEW.nl); -- 获取触发器表插入数据时的nl字段值,插入到jif表的jif字段里
END IF;
END $$
delimiter ;

插入数据

INSERT INTO usr (yhm,xb,nl) VALUES ('东方不败','男',''); -- 向usr表插入数据

4、在触发器里获取到,触发器表指定字段的删除值

OLD获取触发器表指定字段的删除值,后面跟要获取值的字段名称,如:OLD.nl

获取触发器表指定字段的删除值,可以做判断和传值写入等操作

举例:判断触发表删除数据时,如果nl字段值等于30将nl字段值写入另外一张表

-- CREATE(创建) TRIGGER(触发器) 触发器名称 BEFORE(之前) DELETE(删除) ON 表名称 FOR(为) EACH(每一) ROW(行)
-- BEGIN(触发器开始)
-- 触发器行为......
-- END(触发器结束) delimiter $$ -- 因为可能有多条触发行为,所有需要修改语句结束符
DROP TRIGGER if EXISTS chufa_qi_usr; -- 判断这个触发器如果存在删除 CREATE TRIGGER chufa_qi_usr BEFORE DELETE ON usr FOR EACH ROW -- 给usr表创建一个插入数据之前的触发器
BEGIN
IF OLD.nl = '' THEN -- 判断删除数据时触发表的nl字段的值如果等于30
INSERT INTO jif (jif) VALUES (OLD.nl); -- 获取触发器表删除数据时的nl字段值,插入到jif表的jif字段里
END IF;
END $$
delimiter ;

删除数据

DELETE FROM usr WHERE id=15; -- 删除usr表id等于15的数据

5、触发器获取触发表操作字段值重点:

NEW获取触发表插入数据时,指定字段的插入值(插入数据使用)

OLD获取触发表删除数据时,指定字段的删除值(删除数据使用)

NEW、OLD更新数据时都可以使用(更新数据使用)

第二百八十四节,MySQL数据库-MySQL触发器的更多相关文章

  1. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

  2. 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)

    MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...

  3. 第二百八十五节,MySQL数据库-MySQL函数

    MySQL数据库-MySQL函数 1.MySQL内置函数 SELECT执行函数,后面跟要执行的函数 CHAR_LENGTH(str)函数:返回字符串的字符长度 -- CHAR_LENGTH(str)函 ...

  4. 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库

    MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...

  5. 第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件

    jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的 ...

  6. 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算

    Tornado框架-基于正则的动态路由映射分页数据获取计算 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", inde ...

  7. 第二百七十四节,同源策略和跨域Ajax

    同源策略和跨域Ajax 什么是同源策略  尽管浏览器的安全措施多种多样,但是要想黑掉一个Web应用,只要在浏览器的多种安全措施中找到某种措施的一个漏洞或者绕过一种安全措施的方法即可.浏览器的各种保安措 ...

  8. 第二百三十四节,Bootstrap表单和图片

    Bootstrap表单和图片 学习要点: 1.表单 2.图片 本节课我们主要学习一下 Bootstrap 表单和图片功能,通过内置的 CSS 定义,显示各 种丰富的效果. 一.表单 Bootstrap ...

  9. 第二百八十四天 how can I 坚持

    又是一个周一.今天感觉过得好艰辛啊,幸好晚上程秀通过生日请客,吃了顿大餐,还拿回了一瓶酒.哈哈. 其他也没什么了.晚上玩的挺好.不过,回来,老是渴,一直想喝水,现在是又困,又累啊,睡觉了.

随机推荐

  1. Android ListView动画特效实现原理及源代码

    Android 动画分三种,当中属性动画为我们最经常使用动画,且能满足项目中开发差点儿所有需求,google官方包支持3.0+.我们能够引用三方包nineoldandroids来失陪到低版本号.本样例 ...

  2. IIS启用GZip压缩的详细教程(图文)

    本文将详细介绍如何在IIS启用GZip压缩,同时解决可能遇到的一些问题 IIS启用GZip压缩,是提高网站速度和减轻服务器负载的一个优化手段和方法,经测试,网站启用GZip压缩后,速度快了3倍!而配置 ...

  3. gnome3增加自定义程序快捷方式

    gnome3增加自定义程序快捷方式   1. 安装alacarte   在命令行输入下列命令安装alacarte程序   yum -y install alacarte   安装完毕后,在命令行输入下 ...

  4. innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解

    innerHTML属性用来读取或设置某个节点内的HTML代码. outerHTML属性用来读取或设置HTML代码时,会把节点本身包括在内. textContent属性用来读取或设置节点包含的文本内容. ...

  5. K-Means聚类算法的原理及实现【转】

    [转]http://www.aboutyun.com/thread-18178-1-1.html 问题导读:1.如何理解K-Means算法?2.如何寻找K值及初始质心?3.如何应用K-Means算法处 ...

  6. display与visibility的区别

    style.visibility和style.display都可以实现对页的隐藏,但visibility要占用域的空间,而display则不占用 将元素display属性设为 block,会在该元素后 ...

  7. IE11不支持Selenium 2.0的解决方法

    题前话(Pre-words) 希望使用Selenium 2.0的人看到这篇文章能够收藏此文,以后遇到该问题,再也不用花费多余的时间进行research了!本文就是对网上所有千奇百怪各种各样的searc ...

  8. iOS菊花加载圈

    自定制一个继承于UIView的类然后重写initWithFrame方法;如下 - (id)initWithFrame:(CGRect)frame { self = [super initWithFra ...

  9. 一款基于jquery和css3的响应式二级导航菜单

    今天给大家分享一款基于jquery和css3的响应式二级导航菜单,这款导航是传统的基于顶部,鼠标经过的时候显示二级导航,还采用了当前流行的响应式设计.效果图如下: 在线预览   源码下载 实现的代码. ...

  10. 观察者模式(Head First设计模式学习2)

    1.1观察者模式定义 在给出观察者模式的定义之前,我们先来看个报纸和杂志的订阅是怎么回事: 1.报社的业务就是出版报纸 2.向某家报社订阅报纸,只有新报纸出版,报社才会送给你,只要你是用户,他就会一直 ...