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. 【约束布局】ConstraintLayout 偏移 ( Bias ) 计算方式详解 ( 缝隙比例 | 计算公式 | 图解 | 测量图 + 公式 )
  2. Eeic Meyer on CSS 之 背景半透明效果
  3. 详细解读Youtube推荐算法
  4. Windows Server 2008 优化
  5. Python字符串的截取|Python练习题
  6. wifi rssi 计算 距离_用RSSI/TOF判断距离靠谱吗?浅谈RSSI/TOF测距优劣
  7. java 读取 dto_DTO 实现 service 和 controller 之间值传递的操作
  8. 推荐一款专为新手用的Python开发工具
  9. 轻量级日志收集转发 | fluent-bit外部插件详解(三)
  10. mp4视频解码生成图片
  11. 口布杯花的60种叠法_餐巾折花艺术3餐巾折杯花.ppt
  12. Elasticsearch相关操作梳理
  13. tfs php,TFS的原理及应用
  14. 艾永亮:经济型酒店风光不再,亚朵锁定中端酒店市场打造超级产品
  15. D-OJ刷题日记:无向图的邻接矩阵表示法验证程序 题目编号:515
  16. 安卓7.0 申请相机及读写权限
  17. WebStorm2018破解(2018年10月9日  16:13实测有效)
  18. PayPal收款手续费是多少钱?
  19. 解决在nvidia官网下载巨慢的问题
  20. 算法-寻找Top2的升序子数组

热门文章

  1. nyoj1016德莱联盟【判断两线段是否相交】
  2. 直播绿幕抠图的例子(绿幕抠图直播实例参考)
  3. 为什么要隐藏ip地址
  4. oracle remap_tablespace,oracle使用remap_tablespace修改用户数据所在的表空间
  5. java实现爬虫,爬取网易歌单信息
  6. android中Zing二维码扫描,二维码生成
  7. yaml配置Mybatis
  8. 神经网络之父Hinton介绍及其论文介绍
  9. MacBook 常用快捷键
  10. docker ps 命令显示格式化和显示完整信息