触发器

  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. httpClient无证书访问

    1.当不需要使用任何证书访问https网页时,只需配置信任任何证书 HttpClient http = new HttpClient(); String url = "https://pay ...

  2. 配置sql server2012属性 ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_5techref/html/6df812ad-4d80-4503-8a23-47719ce85624.htm

    服务与服务器是两个不同的概念,服务器是提供服务的计算机,配置服务器主要是对内存.处理器.安全性等几个方面配置.由于SQL Server 2005服务器的设置参数比较多,这里选一些比较常用的介绍. 配置 ...

  3. Appium对京东App中WebView的处理

    Appium用uiautomator无法对WebView进行className定位,所以只能模拟动作.可以用android sdk自带的monitor工具,先进行截图,再用任意图像处理软件,获取截图的 ...

  4. 简单易懂的现代魔法——Play Framework攻略2

    接前文:http://www.cnblogs.com/Kassadin/p/4335908.html 上次讲到Play Framework开发环境的配置,以及第一个Hello World程序:本次主要 ...

  5. Project Euler 88:Product-sum numbers 积和数

    Product-sum numbers A natural number, N, that can be written as the sum and product of a given set o ...

  6. lintcode:三数之和

    题目 三数之和 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组. 样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集 ...

  7. JavaWeb项目开发案例精粹-第2章投票系统-006view层

    1.index.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...

  8. java抓取动态生成的网页

    最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架 ...

  9. 【翻译】Zakas解答Baranovskiy的JavaScript测验题

    原文:http://www.nczonline.net/blog/2010/01/26/answering-baranovskiys-javascript-quiz/ ---------------- ...

  10. 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

    这里使用的是HttpComponents-Client-4.1.2 package com.jadyer.util; import java.io.File; import java.io.FileI ...