触发器(trigger)顾名思义能够监视某种情况,当情况发生时,触发某种操作

应用场景:

1、网购过程中。当提交商品订单时,往订单表中插入新记录,触发相应商品表的库存做出相应降低。

2、支付过程中,确认支付时触发验证卡上剩余金额。

等等

以网购的情况举例说明触发器的作用:

现有商品表(goods)。包含商品id(goods_id)。商品名(goods_name)。库存数量(goods_name)

还有订单表(order_table),包含商品id(goods_id)。购买数量(buy_num)

假设往订单表中插入一行记录

代表用户购买了20个商品id为1的商品,即购买了20台小米手机

与此同一时候,在逻辑上goods表中小米手机的库存也应该减去20台。

这两步事实上应该是一个总体。而我们如今是手工操作。怎样让第一步完毕后,第二步自己主动运行呢?

这就能够用到触发器的概念。第一条插入语句的运行。触发了第二条改动库存的SQL

触发器四要素:

监视地点、监视事件、触发时间、触发事件

监视地点:触发器监视的对象是表

监视事件:触发器监视的事件仅仅能是增、删、改

触发时间:在监视事件之前还是之后

触发事件:也仅仅能是增、删、改

查看当前已有的触发器:

show triggers;

触发器的创建:

create trigger 触发器名称

after/befor (触发时间)

insert/update/delete (监视事件)

on  表名 (监视地址)

for each row

begin

sql1;

..

sqlN;

end

须要注意点 是,所须要触发的SQL语句都要以‘;’结束。

end后面也须要有分界符。但不能再是';'。

所以创建触发器之前须要先改动分界符

delimiter 分界符

如今利用触发器对上面的样例进行改动

这个触发器以完毕:当订购了20个商品id为1的商品时。goods表的库存会同步减去20。我们来看看效果

商品id为1的商品库存的确减去了20。触发器的确完毕了任务,但这个触发器并不智能。他仅仅能处理商品id为1,购买数量为20的情况。要想应对其它情况须要获得提交订单的记录才行。

触发器引用行变量:

对于insert。插入一行后出现了一个新行用new表示,在触发器中能够通过new.列名来引用插入行各个字段的值

对于delete。删除一行后之前的那行不见了。用old表示。在触发器中能够通过old.列名来引用被删除行各个字段的值

对于update。改动一行后旧的一样用old表示,新的一行用new表示,在触发器中能够通过new.列名来引用改动后行各个字段的值,old.列名来引用改动前各个字段的值。

知道这些后,对触发器进行进一步改动

再看一下效果

没有提交订单前商品表的情况

提交两个订单

商品表变化

可见触发器的确发生了作用

触发器after和before的差别:

after是先完毕增删改再触发

before是在增删改之前将以推断

前面已经讨论过after的情况。如今假设提交了一个订单购买了100个id为4的商品,然而三星手机库存仅有30个。假设依照上面的触发器。最后库存会变成-70。这显然是不正确的。所以这时候能够利用before来对输入进行推断。假设购买数量大于库存则仅仅能购买所剩下的商品。

如今购买100个id为4的商品

再看看订单表

实际购买的仅仅有30而不是100

mysql修改表分界符号_mysql---触发器相关推荐

  1. mysql修改表结构权限_mysql 修改表结构操作

    mysql 修改表结构操作 使用 [desc 表名]查看表结构 1.mysql > alter table passwd add id int(3) not null auto_incremen ...

  2. mysql修改表结构例子_mysql修改表结构方法实例详解

    本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...

  3. mysql 修改表结构方案_MySQL中修改表结构时需要注意的一些地方

    MySql 在修改表结构的时候可能会中断产品的正常运行影响用户体验,甚至更坏的结果,丢失数据.不是所有的数据库管理员.程序员.系统管理员都非常了解Mysql能避免这种情况.DBA会经常碰到这种生产中断 ...

  4. mysql修改表的结构_MySQL修改表结构

    我们在修改表字段类型和约束条件的时候,如果表中的字段已经有值了,但是你修改的这个类型和字段里边的值不匹配是不允许修改的,就比如说你当初设置字段的时候,字段的值是允许存空值,并且字段里边已经存储空值了, ...

  5. mysql修改表的字段_mysql修改表字段学习笔记

    --修改表字段 CREATE TABLE register ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR (10) DEFAULT NULL UN ...

  6. mysql 修改表列名称_MYSQL数据库- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  7. mysql 修改表属主_mysql主从配置实现一主一从读写分离

    主从介绍 Mysql主从又叫Replication.AB复制.简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启b ...

  8. mysql中修改表结构语法_MySQL表结构修改详解

    MySQL修改表的语法 ========================= 增加列[add 列名] ========================= ①alter table 表名 add 列名 列 ...

  9. mysql修改表和列

    mysql修改列 mysql增加列,修改列名.列属性,删除列语句 mysql修改表名,列名,列类型,添加表列,删除表列   alter table test rename test1; --修改表名 ...

  10. Mysql 创建表、存储过程、触发器 -Angelo 分享

    Mysql 创建表.存储过程.触发器 -Angelo 分享 简单的小例子,创建两个表,一个存储过程,一个触发器 存储过程是个 while 循环,也很简单,循环网表里插数据 功能:表一只要有insert ...

最新文章

  1. r语言 林元震_科学网—ASReml-R之简介 - 林元震的博文
  2. SDN — 核心玩家与技术流派
  3. 算法 - 折半查找(C#)
  4. [SDOI2008]Sandy的卡片
  5. parted命令详解
  6. 【27】Python100例基础练习题6
  7. suspend java_Java线程stop和suspend的废弃
  8. javascript时钟代码 DEMO-002
  9. 冥思苦想,木疙瘩也能崩出个豆:扯一下各大软件的用户体验
  10. 知乎热议:科学网发布文章称「我国数学家证明 NP=P」,会带来怎样的影响?
  11. 获取国家法定节假日和周末
  12. html怎样添加excel表格,html 使用 excel表格数据类型-如何给html页面添加excel表格
  13. dell设置从ssd启动_戴尔笔记本加了固态硬盘后怎么设置从固态硬盘启动
  14. 群晖服务器216j增加硬盘,群晖NAS提速大法:解决机械硬盘频繁同时读写的问题,有效提升硬盘寿命...
  15. 代码项目好程序员的标准
  16. 【android】gradle的applicationId的思考,历史遗留问题,千万要在项目构建前就确定好id名,避免后续的迭代导致问题
  17. 【程序设计】Swing开发技巧总结
  18. @html.textbox 消除边框_裸边框显示器长啥样,飞利浦279C9显示器评测体验
  19. android 卷轴动画,原来这种画卷展开的效果这么简单!三步即可做出来!太惊艳了...
  20. mysql图片类型_MySQL里存储图片的是什么数据类型?

热门文章

  1. Ajax实现动态的二级级联菜单
  2. 北大学子求职经历与建议(IT类) 收藏
  3. stm32气压传感器 带探头的_几种常用传感器
  4. Canal中间件学习总结
  5. 设计模式 ( 十二 ) 静态代理模式
  6. Coding and Paper Letter(四十八)
  7. 使用docker-compose 大杀器来部署服务 上(转)
  8. 关于建立内部会议讨论规范的想法
  9. VMware VirtualBox共存时桥接注意
  10. Windows 8 to Go