文档章节

mysql触发器使用

月下独酌100
 月下独酌100
发布于 2016/06/30 20:29
字数 463
阅读 31
收藏 2
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
博文 220
码字总数 56475
作品 0
浦东
高级程序员
MySQL的触发器

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

往事_Jim_遗
01/08
0
0
mysql-之触发器_已迁移

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

鬼谷子灬
2016/06/29
14
0
《MySQL必知必会》读书笔记(四) 22~30章 完结篇

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

一万
2016/02/08
329
0
MySQL触发器trigger的使用

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

zsdnr
2017/07/21
0
0
MySQL入门很简单-学习笔记 - 第 9 章 触发器

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

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
23分钟前
2
0
Dubbo/HSF在Service Mesh下的思考和方案

开头 Service Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,...

Mr_zebra
25分钟前
0
0
用命令卸载Win8 IE9/IE10/IE11浏览器

首先打开,开始---运行-----框里输入cmd,进入命令提示框,将下面的命令复制粘贴到命令框里,然后按下Enter键执行。 执行完命令,必须重启电脑。 卸载IE9的命令: FORFILES /P %WINDIR%\ser...

JackFace
26分钟前
1
0
2018年产品设计协作领域最强黑马居然是它?

我发了一条朋友圈“感谢池子的秘密法宝,我今天终于吃上了女朋友做的晚饭了”并配上香香的绿豆汤,瞬间获得好几十条评论。 “同为设计师,为啥你会这么早回家?” “快扶我起来,我还能画两个...

mo311
27分钟前
1
0
linux安装jdk1.8(rpm方式)

1:下载JDK的URL地址,例如:http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm。这个地址可以去Orcale的官网找到。通过w......

苏牧影子
31分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部