触发器:一类特殊的事物。可监视某种数据操作,并触发相关操作(insert/update/delete)。表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求。

作用:变化自己主动完毕某些语句查询,加入程序的灵活性。
创建触发器语法:
#delimiter $$  //默认情况下。delimiter是分号“;”,sql语句带有;号结尾会报错,没到end就算到结束了,使用delimiter
$$作用就是告诉mysql语句的结尾换成以$结束,对应使用end$$结束
create trigger test1  #触发器名称
(after/before) #触发时间
(insert/update/delete) #监视事件
on table #监视地点(表名)
for each row #mysql必须加的
begin
sql1
...
sqlN
end。
#end$$
查询已有trigger:show triggers
删除已有trigger:drop trigger 触发器名称
new/old:
update触发:old 代表更新前的记录。new 代表更新后的记录.
insert触发:old 不能使用。new 代表插入的记录.
delete触发:old 代表删除的记录。

new 不能使用.


实例操作:
goods商品表和ord订单表
CREATE TABLE goods(
`goods_id` INT(10),
`name` VARCHAR(20),
`num` SMALLINT(4)
)ENGINE=INNODB CHARSET=utf8
CREATE TABLE `ord`(
`oid` INT(10),
`gid` INT(10),
`much` INT(10)
)ENGINE=INNODB CHARSET=utf8
INSERT INTO goods VALUES
(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);
1、要求每下一个订单,goods表中的库存对应降低订单的数量。

mysql> select * from goods
+----------+------+------+
| goods_id | name | num |
+----------+------+------+
| 1 | cat | 26 |
| 2 | dog | 26 |
| 3 | pig | 26 |
+----------+------+------+
3 rows in set (0.00 sec)
mysql> select * from ord;
Empty set (0.00 sec)

#创建触发器test1
DELIMITER $$
CREATE TRIGGER test1
AFTER
INSERT
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
END$$
mysql> CREATE TRIGGER test1
    -> AFTER
    -> INSERT
    -> ON `ord`
    -> FOR EACH ROW
    -> BEGIN
    -> UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
    -> END$$
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `ord` VALUES (1, 2, 2)$$
Query OK, 1 row affected (0.03 sec)
mysql> select * from ord$$
+------+------+------+
| oid | gid | much |
+------+------+------+
| 1 | 2 | 2 |
+------+------+------+
1 row in set (0.00 sec)
mysql> select * from goods$$
+----------+------+------+
| goods_id | name | num |
+----------+------+------+
| 1 | cat | 26 |
| 2 | dog | 24 |
| 3 | pig | 26 |
+----------+------+------+
3 rows in set (0.00 sec)
goods表里面的dog由26变成24

2、用户取消订单后商品库存订单的商品数要正常入库。

下面仅仅写触发器trigger,操作过程不写太多比較乱。

#触发器test2
CREATE TRIGGER test2
AFTER
DELETE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much WHERE goods_id = old.gid;
END $$

3、用户更新订单的时候。商品库存要依据订单的数量正常更新。
#触发器test3
CREATE TRIGGER test3
AFTER
UPDATE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much - new.much WHERE goods_id = new.gid;
END$$


查询触发器

删除触发器

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


MySQL触发器 trigger学习的更多相关文章

  1. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  2. 如何使用MySQL触发器trigger

    阅读目录:触发器trigger的使用 创建触发器 单一执行语句.多执行语句 new.old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象, ...

  3. mysql 触发器(trigger)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  4. mysql 触发器 trigger用法 two (稍微复杂的)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  5. MySQL触发器Trigger实例篇

    定义: 何为MySQL触发器? 在MySQL Server里面也就是对某一个表的一定的操作,触发某种条件(Insert,Update,Delete 等),从而自动执行的一段程序.从这种意义上讲触发器是 ...

  6. MySQL 触发器trigger

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(af ...

  7. MySQL触发器 trigger之for each row

    for each row 每行受影响,触发器都运行.叫行级触发器. oracle 触发器中分行级触发器和语句级触发器,可不写for each row,不管影响多少行都仅仅运行一次. mysql不支持语 ...

  8. (转)MySQL触发器trigger示例详解

    一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...

  9. mysql 触发器 trigger用法 three (稍微复杂的)

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下 ...

随机推荐

  1. jira从windows迁移到linux

    说明:迁移的就是 jira安装路径/atlassian/jira/atlassian-jira/WEB-INF/classes/jira-application.properties文件中的jira_ ...

  2. BZOJ2393 & 1853 [Scoi2010]幸运数字 【搜索 + 容斥】

    题目 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是" ...

  3. 基里巴斯(path)

    基里巴斯(path) 题目描述 最近,帕特里克沉迷于世界地图上的太平洋地区.他发现了一个名字奇异的岛国:基里巴斯共和国,简称基里巴斯,是一个太平洋岛国. 其由33个岛屿组成. "可惜它快被淹 ...

  4. vuemock数据

    http://www.jianshu.com/p/ccd53488a61b dev.server.js 61 行 app.use('/mock',express.static('./mock'))

  5. photoshop 安装

    Photoshop 下载: http://www.duote.com/soft/54352.html 下载完后解压选择..\Adobe CS6\Set-up.exe ,点击  Set-up.exe   ...

  6. hdu 2243 考研路茫茫——单词情结 AC自动机 矩阵幂次求和

    题目链接 题意 给定\(N\)个词根,每个长度不超过\(5\). 问长度不超过\(L(L\lt 2^{31})\),只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个? 思路 状态(AC自动 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---41

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. cisco packet 实验教程(一)

    01. 开篇:组建小型局域网 实验任务 1.利用一台型号为2960的交换机将2pc机互连组建一个小型局域网: 2.分别设置pc机的ip地址: 3.验证pc机间可以互通. 实验设备 Switch_296 ...

  9. HDU 1024 Max Sum Plus Plus [动态规划+m子段和的最大值]

    Max Sum Plus Plus Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  10. CSU-ACM2018寒假集训选拔-入门题

    [题目链接]:http://vj.bit-studio.cn/contest/205664#overview A: [给你一个长度为n的序列,尾部插入再反转,求n次后最终序列][规律/思维] [分析] ...