4.9. 触发器(Trigger)
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)相关推荐
- MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 studen ...
- mysql之触发器trigger
mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) ...
- oracle 数据库 触发器 trigger 语法
http://shixm.iteye.com/blog/401564 关键字: oracle 数据库 触发器 trigger 语法 语法规则: Create [or replace] trigger ...
- SQL入门(3):定义约束/断言assertion/触发器trigger
本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...
- android sqlite触发器,SQLite---使用触发器(Trigger)
背景 当数据库中的数据太多时,往往需要进行清理,将一些过时的数据删除,但是往往找不到合适的时机进行清理.于是SQLite提供了Trigger,当某些事件发生时,可以触发并且进行处理. Trigger ...
- MySQL触发器 trigger学习
触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句 ...
- WPF中的触发器(Trigger)
这节来讲一下WPF中的触发器--Trigger.触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作.在WPF中,触发器可以分为以下几类:基本触发器(Trigger):事件触发器(Event ...
- WPF触发器(Trigger)
WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...
- mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...
问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...
- mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目
触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...
最新文章
- @Controller和@RestController的区别?
- 结构体和typedef
- python 数据分析工具之 numpy pandas matplotlib
- Docker(一)Centos7.0安装Docker
- Redis(1) 简介以及linux环境下的安装
- Jquery常用正则验证
- 未来的计算机作文 800字,未来科技作文800字
- hive 增加表字段语录_Hive改表结构的两个坑|避坑指南
- python post 表单类数据_python post content-type:multipart/form-data 类型的表单数据
- Android通信v2.0
- C语言博客作业--一二维数组
- 矩阵论比较好的书 和 相关资源
- 【5G NR】RRC Reject解析
- css 响应式布局(媒体查询),兼容pc,ipad,移动端的布局单位
- oracle与用友的差别,用友U9 PK SAP/Oracle:敢比就是赢
- android模拟器玩手游,手游模拟器使用说明 手游在电脑上玩的方法介绍
- GSMA TAC核发及IMEI编码规则
- js实现购物车加减和价格运算
- Mp3:最后的免费“午餐”
- java 快速创建map_快速创建 Map
热门文章
- android opengl 简书,Android OpenGL入门
- matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...
- WinMerge 过滤器的使用方法
- 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。
- 四则运算之结对作业报告
- c语言 | 求1000-2000年之间的闰年
- 深度学习系列25:注意力机制
- vue大括号里接受一个函数_vue双花括号的使用方法 附练习题
- Scala学习笔记(三)类层级和特质
- 耐摔 8寸 android,屏幕耐摔的手机有哪些?6款屏幕耐摔的手机推荐