文档章节

mysql触发器使用

月下独酌100
 月下独酌100
发布于 2016/06/30 20:29
字数 463
阅读 29
收藏 2
点赞 0
评论 0
a.准备表:
创建中间表
CREATE TABLE `testTriggerCount` (
      id int(32) not null,
      count int(32) not null
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into testTriggerCount(id,count) values(1,1);
create table testabc as select * from jiraissue(jira的核心表)



b. 创建触发器test1,当testabc表有更新的时候,更新testTriggerCount表的id为1的count=count+1,触发器工作
 b1.DROP TRIGGER IF EXISTS `test1`;

 b2.创建触发器
 DELIMITER $$
 CREATE TRIGGER `test1` after
 update ON `testabc` FOR EACH ROW
 BEGIN
 IF NEW.issuestatus <> OLD.issuestatus && OLD.issuetype=5 && NEW.issuestatus='10007' THEN
 update testTriggerCount set count=count+1 where id=1;
     END IF;
  END$$
 DELIMITER ;

 b3.执行下面语句的时候,更新了testTriggerCount表
 update testabc set issuestatus='10007' where id=16095

c.无效的触发器,可以创建,但是当触发器被触发的时候会报错
 c1.创建触发器
 DELIMITER $$
 CREATE TRIGGER `test1` after
 update ON `testabc` FOR EACH ROW
 BEGIN
 IF NEW.issuestatus <> OLD.issuestatus && OLD.issuetype=5 && NEW.issuestatus='10007' THEN
  update testabc set assignee='abc' where id in (select distinct source from issuelink where destination=OLD.id);
     END IF;
  END$$
 DELIMITER ;

 c2. 创建触发器test1
 DELIMITER $$
 CREATE TRIGGER `test1` before
 update ON `testabc` FOR EACH ROW
 BEGIN
 IF NEW.issuestatus <> OLD.issuestatus && OLD.issuetype=5 && NEW.issuestatus='10007' THEN
 update testabc set issuestatus='10007' where  id in (select distinct source from issuelink where destination=OLD.id);
     END IF;
  END$$
 DELIMITER ;

 c3.当创建上面的任何一个触发器之后,
  执行update  testabc set issuestatus='10007' where id=16095

  会报出下面的错误:
   19:52:26    update jira.testabc set issuestatus='10007' where id=16095
   Error Code: 1442.
   Can't update table 'testabc' in stored function/trigger because it is
   already used by statement which invoked this stored function/trigger.


d.下面这种触发器,只更新受影响的列,是可以的
 d1. 触发器1
 DELIMITER $$
 CREATE TRIGGER `test1` before
 update ON `testabc` FOR EACH ROW
 BEGIN
 IF NEW.issuestatus <> OLD.issuestatus && OLD.issuetype=5 && NEW.issuestatus='10007' THEN
  set new.assignee='abc';
     END IF;
  END$$
 DELIMITER ;

 d2. 触发器1
 DELIMITER $$
 CREATE TRIGGER `test1` before
 update ON `testabc` FOR EACH ROW
 BEGIN
 IF NEW.issuestatus <> OLD.issuestatus && OLD.issuetype=5 && NEW.issuestatus='10007' THEN
  set NEW.issuestatus='111';
     END IF;
  END$$
 DELIMITER ;

 d3.操作下面语句,触发触发器生效
update testabc set issuestatus='10007' where id=16095


参考:
https://www.sitepoint.com/how-to-create-mysql-triggers/
http://stackoverflow.com/questions/15300673/mysql-error-cant-update-table-in-stored-function-trigger-because-it-is-already

© 著作权归作者所有

共有 人打赏支持
月下独酌100
粉丝 25
博文 186
码字总数 56475
作品 0
浦东
高级程序员
十一、MySQL触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会触...

运维菜鸟丶 ⋅ 2017/08/05 ⋅ 0

MySQL的触发器

触发器—trigeer是数据库下用于监视数据改变的某种情况,并触发执行某种操作的一个功能,简单来说就是对某一张表符合某种条件的更改前或者后执行一段存储过程。在这里就简单的说一说在MySQL...

往事_Jim_遗 ⋅ 01/08 ⋅ 0

【数据库】触发器详解

1 引言 Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是mysql5新增的功能,目前线上凤巢系统、北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-...

磊神Ray ⋅ 2012/02/23 ⋅ 1

mysql-之触发器_已迁移

mysql 触发器 当发生某个事件(增删更查)时可以执行定义的sql语句 ===============总结 无情的分隔线 总结======================== 一、触发器作用 MySQL包含对触发器的支持。触发器是一种与...

鬼谷子灬 ⋅ 2016/06/29 ⋅ 0

《MySQL必知必会》读书笔记(四) 22~30章 完结篇

1、视图 视图不包含表中应该有的任何列或数据,它包含的是一个SQL查询。在视图创建之后,可以用于表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视...

一万 ⋅ 2016/02/08 ⋅ 0

MySQL触发器trigger的使用

Q:什么是触发器? A:   触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。 触发器的特性:   1、有begin end体,begin end;之间的语句可以写的简单...

zsdnr ⋅ 2017/07/21 ⋅ 0

MySQL入门很简单-学习笔记 - 第 9 章 触发器

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

MySQL之存储过程.触发器学习整理

前几天去参加腾讯的面试,在一面中,面试官问了一个问题:会用数据库吗?我说基本的会,然后他说:现在写一个删除一列的sql语句,然后就尴尬了。。。 回来后,决定好好把基本的sql语句好好学...

一宁 ⋅ 2012/04/25 ⋅ 3

mysql触发器创建语法

最近有一个需求需要使用mysql的触发器来实现,于是就开始编写触发器的创建sql语句,在网上找了一下创建触发器的说明,按照样子来编写,竟然说有语法错误,后来在mysql官方的文档资料里面找到...

阿信sxq ⋅ 2016/08/24 ⋅ 0

【MySql】9.触发器

触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句): DELETE; INSERT; UPDATE; 使用触发器,需要MySQL5或之后的版本支持。 一、触发器基本...

Jannie_xx ⋅ 2014/05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 21分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 43分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 44分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 56分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 今天 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 今天 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部