4.9.1. create trigger

4.9.1.1. Update 更新出发

实现 history 历史表功能,BEFORE update 做到数据库更新自动备份

CREATE TABLE user_history SELECT * FROM user WHERE 1 <> 1DELIMITER //
CREATE TRIGGER user_history BEFORE update ON user FOR EACH ROW
BEGIN
insert into user_history SELECT * FROM user WHERE id = OLD.id;
END; //
DELIMITER ;

判断某字段数据修改满足条件后出发。

CREATE DEFINER=`dba`@`%` TRIGGER `cms`.`jc_content_BEFORE_UPDATE` BEFORE UPDATE ON `jc_content` FOR EACH ROW
BEGINIF NEW.status = '1' THENinsert into `neo`.elasticsearch_trash(id) values(OLD.content_id);END IF;IF NEW.status = '2' THENdelete from `neo`.elasticsearch_trash where id = OLD.content_id;END IF;
END

4.9.1.2. Delete 删除出发

CREATE DEFINER=`dba`@`%` TRIGGER `cms`.`jc_content_BEFORE_DELETE` BEFORE DELETE ON `jc_content` FOR EACH ROW
BEGINinsert into `neo`.elasticsearch_trash(id) values(OLD.content_id);
END

4.9.1.3. Insert 插入出发

           

4.9.2. drop trigger

DROP TRIGGER admin_user_history;DELIMITER //
CREATE TRIGGER admin_user_history BEFORE update ON admin_user FOR EACH ROW
BEGIN
insert into admin_user_history SELECT * FROM admin_user WHERE user_id = OLD.user_id;
END; //
DELIMITER;

4.9.3. show triggers

show triggers;

4.9.4. EXAMPLE

4.9.4.1. BEFORE/AFTER

例 4.1. BEFORE/AFTER

DROP TRIGGER MY_TEST_MONITOR;
DELIMITER //
CREATE TRIGGER MY_TEST_MONITOR BEFORE insert ON MY_TEST FOR EACH ROW
BEGININSERT INTO MY_TEST_MONITOR SELECT * FROM MY_TEST WHERE TICKET = NEW.TICKET;
END; //
DELIMITER;
DROP TRIGGER MY_TEST_MONITOR;
DELIMITER //
CREATE TRIGGER MY_TEST_MONITOR AFTER insert ON MY_TEST FOR EACH ROW
BEGININSERT INTO MY_TEST_MONITOR SELECT * FROM MY_TEST WHERE TICKET = NEW.TICKET;
END; //
DELIMITER;

通过触发器保护数据,防止重复插入数据

CREATE DEFINER=`neo`@`%` TRIGGER `members_before_insert` BEFORE INSERT ON `members` FOR EACH ROW BEGINIF new.username IS NOT NULL THENIF exists(select m.username from members m where m.username = new.username) THENset new.username = '';END IF;END IF;
END                 

4.9.4.2. UUID

例 4.2. uuid()

delimiter $$CREATE TABLE `member` (`uuid` char(36) NOT NULL,`username` varchar(20) DEFAULT NULL,`password` varchar(32) DEFAULT NULL,PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$CREATE
DEFINER=`root`@`%`
TRIGGER `test`.`member_before_insert`
BEFORE INSERT ON `test`.`member`
FOR EACH ROW
SET new.uuid = uuid()
$$

4.9.4.3. CALL PROCEDURE

CREATE DEFINER=`neo`@`%` TRIGGER `accounts_angelfund` AFTER INSERT ON `accounts` FOR EACH ROW BEGINIF new.paymode = 'angelfund' THENcall angelfund(new.name,new.ctime);        END IF;ENDCREATE DEFINER=`neo`@`%` PROCEDURE `angelfund`(IN `puid` VARCHAR(50), IN `ptime` DATETIME)LANGUAGE SQLNOT DETERMINISTICCONTAINS SQLSQL SECURITY DEFINERCOMMENT ''
BEGINDECLARE fusername VARCHAR(16) DEFAULT NULL;DECLARE fchinese_name VARCHAR(16) DEFAULT NULL;DECLARE fmembers_date VARCHAR(20) DEFAULT NULL;SELECT username,chinese_name,FROM_UNIXTIME(createtime) INTO fusername,fchinese_name,fmembers_date FROM members WHERE username = puid;IF fusername IS NOT NULL THENINSERT IGNORE INTO angelfund(username,chinese_name,members_date,accounts_date,endtime,`status`,op,operator,`description`) value(fusername,fchinese_name,fmembers_date,ptime,DATE_ADD(ptime, INTERVAL +1 MONTH),'N','N','computer','');END IF;END              

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

4.9. 触发器(Trigger)相关推荐

  1. MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除

    我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 studen ...

  2. mysql之触发器trigger

    mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete)  ...

  3. oracle 数据库 触发器 trigger 语法

    http://shixm.iteye.com/blog/401564 关键字: oracle 数据库 触发器 trigger 语法 语法规则: Create [or replace] trigger ...

  4. SQL入门(3):定义约束/断言assertion/触发器trigger

    本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...

  5. android sqlite触发器,SQLite---使用触发器(Trigger)

    背景 当数据库中的数据太多时,往往需要进行清理,将一些过时的数据删除,但是往往找不到合适的时机进行清理.于是SQLite提供了Trigger,当某些事件发生时,可以触发并且进行处理. Trigger ...

  6. MySQL触发器 trigger学习

    触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句 ...

  7. WPF中的触发器(Trigger)

    这节来讲一下WPF中的触发器--Trigger.触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作.在WPF中,触发器可以分为以下几类:基本触发器(Trigger):事件触发器(Event ...

  8. WPF触发器(Trigger)

    WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...

  9. mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...

  10. mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

最新文章

  1. @Controller和@RestController的区别?
  2. 结构体和typedef
  3. python 数据分析工具之 numpy pandas matplotlib
  4. Docker(一)Centos7.0安装Docker
  5. Redis(1) 简介以及linux环境下的安装
  6. Jquery常用正则验证
  7. 未来的计算机作文 800字,未来科技作文800字
  8. hive 增加表字段语录_Hive改表结构的两个坑|避坑指南
  9. python post 表单类数据_python post content-type:multipart/form-data 类型的表单数据
  10. Android通信v2.0
  11. C语言博客作业--一二维数组
  12. 矩阵论比较好的书 和 相关资源
  13. 【5G NR】RRC Reject解析
  14. css 响应式布局(媒体查询),兼容pc,ipad,移动端的布局单位
  15. oracle与用友的差别,用友U9 PK SAP/Oracle:敢比就是赢
  16. android模拟器玩手游,手游模拟器使用说明 手游在电脑上玩的方法介绍
  17. GSMA TAC核发及IMEI编码规则
  18. js实现购物车加减和价格运算
  19. Mp3:最后的免费“午餐”
  20. java 快速创建map_快速创建 Map

热门文章

  1. android opengl 简书,Android OpenGL入门
  2. matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...
  3. WinMerge 过滤器的使用方法
  4. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。
  5. 四则运算之结对作业报告
  6. c语言 | 求1000-2000年之间的闰年
  7. 深度学习系列25:注意力机制
  8. vue大括号里接受一个函数_vue双花括号的使用方法 附练习题
  9. Scala学习笔记(三)类层级和特质
  10. 耐摔 8寸 android,屏幕耐摔的手机有哪些?6款屏幕耐摔的手机推荐