触发器

  1. mysql触发器 情景说明

  情景设置,如图,当我们点击了购买,将会发生什么?

  

  现有如下两张表

  商品表

  编号(id)名称(name)价格(price)库存(stock)

  1F2战斗机10000100

  2法拉利80070

  3航空母舰500020

  4三栖交通工具100050

  订单表

  编号(id)商品编号(tid)购买数量(num)下单时间(order_time)

  我们现在要买5架F2战斗机,下一个订单,需要做什么?

  传统的做法:

  insert into ord(tid,num) values(1,5);

  update traffic set stock = stock - 5 where id = 1;

  新的方式:

  我们可以使用触发器,一触即发!!

  2.mysql触发器使用:trigger

  

  2.1 触发器四要素:

  地点:(表,table),

  监视的事件:(insert,delete,update)

  时间:(before/after)

  触发的事件:(insert,delete,update)

  2.2创建触发器的语法:

  

  注意:在写触发器之前,要更改的mysql的分隔符。

  监视事件和触发事件之间如何传递值?

  需求:现在我们要购买 10辆法拉利, 商品表里的触发器应该 这样写:

  #商品表的触发器

  delimiter $

  create triggter tg1

  after //事件触发在 下订单之后

  insert // 监视插入事件

  on order // 监视 order订单表

  for each row

  begin

  update traffic set stock=stock- new,num where id= new id;

  end $

  在order表的操作:

  insert into(tid,num) values(2,10);

  以下分析均对于 order表而言

  对于insert而言,

  

  新旧关系

  New表示是新插入的一行,

  要引用其中的tid和num,如何引用?

  New.tid

  new.num

  对于delete而言:

  

  对于update而言

  

  需求:先购买了10个辆法拉利,然后要把数量更改为5,写出触发器;

  #商品表的触发器

  mysql> delimiter $

  mysql> create trigger tg3

  -> after

  -> update

  -> on ord

  -> for each row

  -> begin

  -> update traffic set stock = stock + old.num - new.num where id = new.tid;

  -> end $

  [关于before]

  有没有before的情况。

  After:在监视事件发生之后触发的,触发事件要晚于监视事件。

  Before:在监视事件发生之前触发的,触发事件要早于监视事件。

  需求:若订单数量超过10的话,就认为是恶意订单,只让其购买10个。

  #商品表的触发器

  mysql> delimiter $

  mysql> create trigger tg4

  -> before

  -> insert

  -> on ord

  -> for each row

  -> begin

  -> if new.num > 10 then

  -> set new.num = 10;

  -> end if;

  -> update traffic set stock = stock - new.num where id = new.tid;

  -> end $

  3.触发器应用场合

  1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。

  比如,当一个订单产生时,订单所购的商品的库存量相应减少。

  2.当表上某列数据的值与其他表中的数据有联系时。

  比如,当某客户进行欠款消费,可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。

  3.当需要对某张表进行跟踪时。

  比如,当有新订单产生时,需要及时通知相关人员进行处理,此时可以在订单表上设计添加触发器加以实现

mysql教程-触发器的更多相关文章

  1. 转-MySQL教程-写的很详细,赞一个

    原帖地址:https://www.w3cschool.cn/mysql/,谢谢原帖大人 MySQL是什么? MySQL安装 MySQL示例数据库 MySQL导入示例数据库 MySQL基础教程 MySQ ...

  2. 《史上最简单的MySQL教程》系列分享专栏

    <史上最简单的MySQL教程>系列分享专栏 <史上最简单的MySQL教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read ...

  3. 整理:史上最简单的 MySQL 教程

    1 前言 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成 ...

  4. windows7配置Nginx+php+mysql教程

    windows7配置Nginx+php+mysql教程 最近在学习php,想把自己的学习经历记录下来,并写一些经验,仅供参考交流.此文适合那些刚刚接触php,想要学习并想要自己搭建Nginx+php+ ...

  5. MySQL 教程分享

    MySQL 教程 MySQL 安装 MySQL 管理与配置 MySQL PHP 语法 MySQL 连接 MySQL 创建数据库 MySQL 删除数据库 MySQL 选择数据库 MySQL 数据类型 M ...

  6. CentOS6.0(64位)安装Apache+PHP+Mysql教程,安装Magento(解决DOM,Mcrypt,GD问题)完整教程

    CentOS6.0(64位)安装Apache+PHP+Mysql教程,安装Magento(解决DOM,Mcrypt,GD问题)完整教程 0   Posted by :小黑 On : 2012 年 9 ...

  7. 数据库发出sql命令mysql教程

    $db = mysql教程_connect("localhost", "phpdb", "phpdb");mysql_select_db(& ...

  8. mysql之触发器trigger 详解

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table)  ...

  9. 初试mysql存储过程&触发器

    玩mysql以来,一直没有试过实现存储过程,因为存储过程的语法看起来有些笨重.所以一直采用手动批量运行查询,而且要手动改日期之类的参数. 今天尝试着学了一会,发现其实是很简单的.语法上确实格式复杂些, ...

随机推荐

  1. 去除List集合中的重复对象,Map遍历代码

    /*** * 去除List<PartsInfoDTO>列表中的重复对象 ~!! * @param list * @return */ public static List<Parts ...

  2. HDOJ 1284 钱币兑换问题

    转自:wutianqi http://www.wutianqi.com/?p=981 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 tag:母 ...

  3. ibatis缓存初探(1)

    一,IBATIS 缓存机制使用 1,sqlMapConfig.xml中配置   1.SqlMapConfig.xml中 <settings cacheModelsEnabled="tr ...

  4. Linux 2.4.x内核软中断机制

    http://www.ibm.com/developerworks/cn/linux/kernel/interrupt/ 软中断概况 软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执 ...

  5. scanf()函数用法小结

    scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息. 其调用格式为:      scanf("<格式化字符串>",<地址表>); ...

  6. tornado nginx supervisor

    安装:sudo apt-get install python-tornado sudo apt-get install nginx sudo apt-get install supervisor 1. ...

  7. MultiSelectListPreference 的使用心得

    最近在学习Android上的开发,打算做一个app.在做之前感觉很简单的功能,自己也有几年的C++经验,应该学起来很容易.但是事实告诉我,要注意的细节还是很多的. 大部分的app都会有设置页面, 用来 ...

  8. iOS iOS7越狱

    1.使用盘古越狱工具 (或者PP助手) 2.越狱成功后需要安装Apple File Conduit “2”,用于替代afc2add插件 3.安装AppSync插件 (绕过系统验证,随意安装.运行破解的 ...

  9. Android 自定义Android带图片和文字的ImageButton

    经过分析,上述按钮效果实际上就是一个布局,一个最简单不过的垂直线性布局,上部分是一个ImageView,下部分是一个TextView,这个布局可点击.可设置监听. 我们首先要编写自己的ImageBut ...

  10. Eclipse - FindBugs Plugin 的安装和使用

    Eclipse -  FindBugs Plugin 的安装和使用 FindBugs is a static analysis tool that examines the classes in se ...