触发器

简要

1、触发器基本概念

2、触发器语法及实战样例

3、before和after差别

一、触发器基本概念

1、一触即发

2、作用: 监视某种情况并触发某种操作

3、观察场景

一个电子商城:

商品表,goods

主键(goods_id)

商品名称(goods_name)

库存(goods_number)

1

iphone6

10

2

小米手机

28

订单表,orders

订单主键(order_id)

商品主键(goods_id)

购买数量(buy_num)

1

2

3

2

1

4

从php的角度看,完毕下单与降低库存的逻辑例如以下:

a、下单后。往orders表插入数据:

insert into orders(goods_id,bug_num)values(2,3);

b、改动goods相应商品的库存:

update goods setgoods_number=goods_number-3 where goods_id=2;

总结: 这两个逻辑能够看成是一个总体,或者说,insert—>触发update

处理方案: 使用触发器来解决上述问题,我们能够监视某张表的变化,当发生某种变化时,触发某个操作

4、触发器监视以及触发什么变化

a、监视update/insert/delete

b、触发update/insert/delete

二、触发器语法

1、创建语法的四个要素

2、创建触发器

2.1、測试案例的表结构

#商品表

create table goods

(goods_id int,goods_name varchar(10),goods_number smallint)charset=utf8;

insert into goods

values(1,'iphone6',10),(2,'小米手机',28);

#订单表

create table orders

(order_id int,goods_id int,buy_num smallint)charset=utf8;

insert into orders

values(1,2,3),(2,1,4);

2.2、创建触发器语法

createtrigger triggerName

after/beforeinsert/update/deleteon Table

begin

sql语句(一句或多句sql)

end;

2.3、触发器实例

2.3.1、建立触发器。往订单表orders插入数据时,更新商品表goods的库存量

往orders表插入数据前,各个表的数据例如以下

往orders表插入数据:

查看goods表的数据:

此时,orders表插入的是iphone6两台,可是降低的却是小米手机商品的库存。

当往orders表插入的是小米手机两台呢?

此时,降低的也是小米手机。可是降低的是1,而不是2

问题:出在哪里?

1、查看刚建立的触发器信息

原来触发的sql语句是固定某个商品id的。因此。触发仅仅对该商品id发生作用

2、怎样在触发器引用行的值?

对于insert而言,新增的行。用new来表示,行中的每一列的值,用new.列名来表示

3、改动触发器t1(删除原来又一次建立)



4、验证结果

插入前,各个表数据例如以下

插入orders表。iPhone6三台

插入orders表,小米手机五台

2.3.2、建立触发器,往订单表orders删除数据时,更新商品表goods的库存量

a、建立触发器t2

b、删除orders的数据

b1、删除前。各个表数据

b2、删除后。各个表数据:

总结:

对于delete而言。怎样在触发器引用行的值?

对于delete操作来说。它要操作的数据,已经是存在表中了,因此用old来表示,行中的每一列的值,用old.列名来表示

2.3.3、建立触发器,往订单表orders改动数据时。更新商品表goods的库存量

a、创建触发器t3

b、改动orders表数据

b1、改动前,各个表的数据

b2、改动后。各个表的数据

总结:

对于update而言,怎样在触发器引用行的值?

对于update操作来说。它要操作的数据,已经是存在表中了,因此用old来引用改动前的值,改动后则为用new来引用新值

2.4、查看触发器和删除触发器语法

2.4.1、查看全部触发器

2.4.2、查看某个触发器

2.4.3、删除触发器

三、before与after的差别

1、差别:

a、after是先完毕数据的增删改后。再触发

触发中的语句晚于增删改,无法影响前面的增删修改作

b、before是先完毕触发,再增删改

触发的语句先于监视的增删改发生,我们有机会推断,改动即将发生的操作

2、案例:

对于所下订单进行推断,假设订单的数据>5,则觉得是非法订单,强制把所订商品数据改成5

2.1、建立触发器

2.2、插入前。各个表的数据

2.3、插入后。各个表的数据

The quieter you become。the more you are able to hear!

小贝_mysql 触发器使用的更多相关文章

  1. 小贝_mysql建表以及列属性

    mysql建表以及列属性 简要: 一.建表原则 二.具体的列属性说明 一.建表原则 建表: 事实上就是声明列的过程,数据终于是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原 ...

  2. 小贝_mysql优化学习

    mysql优化 简要: 1.数据库设计优化 2.sql语句优化 3.表切割 4.读写分离技术 一.数据库设计优化 1.表设计要符合三范式.当然,有时也须要适当的逆范式 2.什么是三范式 一范式: 具有 ...

  3. 小贝_mysql select连接查询

    select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...

  4. 小贝_mysql主从复制作用以及案例

    mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制   一.mysql用户授权 1.命令 2.作用:进行权限控制 3.样例: (备注: 同意 ...

  5. 小贝_mysql数据库备份与恢复

    mysql数据库备份与恢复 简要:        一.数据库备份        二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...

  6. 小贝_mysql 存储过程

    存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...

  7. 小贝_mysql sql语句优化过程

    sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的运行频率. (2).定位运行效率较低的SQL语句-(重点select) (3).通过explain分析低 ...

  8. 小贝_mysql三种子查询

    mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...

  9. 小贝_mysql select5种子句介绍

    mysql select5种子句介绍 简要 一.五种字句 二.具体解释五种字句 一.五种字句 where.group by.having.order by.limit 二.具体解释五种字句 2.1.理 ...

随机推荐

  1. Android性能优化工具之Systrace

    本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tui ...

  2. Pandas快速入门(一)

    快速使用 bogon:Documents rousseau$ ipython --pylab Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23 ...

  3. Logstash中如何处理到ElasticSearch的数据映射

    Logstash作为一个数据处理管道,提供了丰富的插件,能够从不同数据源获取用户数据,进行处理后发送给各种各样的后台.这中间,最关键的就是要对数据的类型就行定义或映射. 本文讨论的 ELK 版本为 5 ...

  4. @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类

    NoClassDefFoundError could not initialize class 静态类 spring boot 静态类 java.lang.ExceptionInInitializer ...

  5. 【BZOJ】【4144】【AMPPZ2014】Petrol

    最短路+最小生成树+倍增 图论问题中综合性较强的一题= =(Orz vfk) 比较容易发现,关键的还是有加油站的这些点,其他点都是打酱油的. 也就是说我们重点是要求出 关键点之间的最短路. 这玩意…… ...

  6. maven打包加时间戳

    基于Maven的项目,发布时需要打包,如tar.gz.web项目打成war格式包.每次打包时希望自己加上时间戳,假如我的项目名是myproject,默认打包后名为myproject.war.而我希望的 ...

  7. [转]使用HackCube-Special分析胎压传感器信号

    胎压无线传感器安全检测 我们团队之前也有用USRP和GNUradio对其他的胎压设备进行的安全检测,我不使用这套环境的原因是软件无线电的设备和笔记本已经算体积不小的一套设备,通常测试环境都在户外,在这 ...

  8. [PowerShell Utils] Automatically Change DNS and then Join Domain

    I would like to start a series of blog posts sharing PowerShell scripts to speed up our solution ope ...

  9. CentOS6 安装并破解Jira 7

    CentOS6 安装并破解Jira 7 JIRA软件是为您的软件团队的每个成员构建的,用来规划,跟踪和发布优秀的软件. https://confluence.atlassian.... 最低硬件要求及 ...

  10. 用jstl标签判断一个字符串是否包含了另一个字符串

    <c:if test="${fn:contains(str1,str2)}">