mysql 触发器存储过程的区别_MySQL触发器、存储过程实现
MySQL触发器、存储过程实现
很多程序员在出去面试的时候都会存在这样一个问题,就是笔试题中对于sql语句的考察,很多关键字的写法忘记了甚至是完全没有用过,但是如果你能百度一下或者看一下之前写的代码又会瞬间想起来,这其实是一个比较尴尬的问题,仅仅的因为一个关键字就能否定你的sql能力或者代码能力吗?当然这是很片面的。但是sql的关键字又实在是太多,一个一个整理未免太多复杂,所以我这里不过多的介绍了,碰到了,自己查下资料即可。今天主要介绍的是触发器、存储过程的用法。
触发器的语法:
Delimiter $
Create trigger 触发器名称
After/before insert/update/delete on 表名
For each row #每隔一行执行一次动作,而不是对整个表(mysql中一般是固定写法)
Begin
sql语句
End$
Delimiter ;
解释一下,上面的语法意思:
在执行表的增删改之后或之前,完成事件的触发
下面,我们看下具体的例子,场景如下:
当我们向订单中插入数据时,商品表中的对应商品要减少对应的数量,这里我们使用触发器来实现;
触发器代码:
new.order_count 和new.g_id都是订单表中新传入的数据,根据新插的值进行动态更新
执行如下代码:
意为在我向订单表中插入数据之后,触发 更新商品表的sql语句
插入前:
插入后:
到这里,触发器的实现就已经完全写完了。但是,这里还可能存在一种情况,用户如果不想买了,我们应该如何处理,你需要把订单表的记录删除,然后把对应的商品数量加回去。
触发器:
需要注意的是我们这里不能再使用new.order_count 和new.g_id,而应该换成对应的old,因为我们要删除的信息不是新插入的,而是用的之前的,这一点应该是不难理解的。
执行如下代码:
删除后:
可以看到,此时的面包数量已经加回来了;
上述代码写得都是先执行增删改,再进行触发,下面我们演示先触发,再进行对应的增删改
结合具体实例:
用户在购买的时候,我们实际开发中需要先对商品数量进行判断,如果,商品库存不足或者小于订单购买量,此时应提示库存不足。
同样,需要用到before关键字,意为先触发事件,再进行增删改
触发器代码如图:
执行下面代码:
插入前:
插入后:
可以看到,我们明明购买了10个,但是库存只有8个,所以经过判断我们最多只能购买8个,当然,这里呢,也会存在一个问题,这个sql里面的8写的并不规范,正常来讲,应该先查询数量,再判断,这里只是解释after和before的区别。
存储过程语法:
Create procedure 存储过程名称(in/out 参数名 参数类型)
Begin
带参数的Sql代码
End
Call 存储过程名称();#调用存储过程
查询结果:
类似于java里面的一个方法,通过set来给参数赋值,调用方法,获得查询结果
另外,提一句,有的人用的declare 给参数赋值,不是用的set,区别是:declare设置的是局部变量,set设置的是全局变量,大家可以自己试试。
总结:看起来触发器和存储过程的区别不是很大,比如我用触发器实现的功能放在存储过程中运行也没有问题,那么这两者如何区分呢?首先,触发器的执行不需要手动去调用,只要执行对应的sql就可以完成相应的事件触发,而存储过程必须手动去调用,这里的存储过程其实更类似于我们java中的方法;事实上,在实际的开发中,一般的简易的sql根本没有必要写存储过程,存储过程一般用来实现比较复杂的查询逻辑,用的时候调用即可。
以上
mysql 触发器存储过程的区别_MySQL触发器、存储过程实现相关推荐
- mysql触发器发送curl请求_mysql触发器作用,好处和curl
什么是触发器: 触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行. 触发器有什么作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. 2.审计.可以跟踪用户对数据 ...
- mysql函数如何调用过程_MySQL调用存储过程和函数
存储过程和存储函数都是存储在服务器端的 sql 语句集合.要想使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现. 存储过程通过 CALL 语句来调用,存储函数的使用方法与 MysqL ...
- mysql的存储过程与事务_mysql的存储过程与事务入门
存储过程是: 通过一系列的SQL语句, 根据传入的参数(也可以没有), 通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译.主要 ...
- mysql触发器求属性和_MySQL触发器demo
MySQL触发器示例 0写在之前: 最近在带浙大本科生的数据库系统的上机课,我手里拿到的教学文档非常的老,本人及不习惯老文档里的sql server的操作,就让大家安装的MySQL,这就有了个问题:M ...
- mysql 存储过程改用户_Mysql修改存储过程相关权限问题
在使用mysql数据库经常都会遇到这么一个问题,其它用户定义的存储过程,现在使用另一个用户却无法修改或者删除等:正常情况下存储过程的定义者对它有修改.删除的权限:但是其它的用户就要相于的授权,不然无法 ...
- mysql数据存储过程详解_mysql数据存储过程参数实例详解
MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...
- mysql 存储过程 生成数据_mysql使用存储过程,批量生成测试数据
1.存储过程代码 delimiter $$ DROP PROCEDURE IF EXISTS create_service_data$$ create procedure create_service ...
- mysql建立存储过程报错_MySQL创建存储过程(CREATE PROCEDURE)
MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程. 编写存 ...
- mysql怎样循环执行存储_mysql 循环存储过程
create procedure cunchu1(a int) begin DECLARE count int default 0; -- 定义变量 DECLARE i int default 1; ...
- mysql存储过程数组字符串_Mysql通过存储过程分割字符串为数组
分割字符串为数组需要用到 三个mysql 的函数 : REVERSE(str) 返回颠倒字符顺序的字符串str. SUBSTRING_INDEX(str,delim,count) 返回从字符串str的 ...
最新文章
- mxnet speech_recognition踩坑记
- 9、ctemplate文档,简记(2)
- 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
- C# 面向对象版 Windows挖雷 v0.8 release 非FloodFill算法解
- C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
- JS~~~ 前端开发一些常用技巧 模块化结构 命名空间处理 奇技淫巧!!!!!!...
- 【深度学习】 - MobileNet使用的可分离卷积
- C++通过系统版本号获取windows系统版本
- 基于Redis的用户发微博
- GPL协议、LGPL协议与BSD协议的法律区别
- HFSS 天线设计流程概述-截图
- 一百多个实用ZBrush笔刷和Alpah,笔刷使用方法,让建模更简单!
- spark机器学习电影推荐
- 淘宝京东查看价格历史的chrome插件
- 网站联系表单,honeypot蜜罐理论及操作技术,诱饵机器人
- 学校计算机社团都干些什么,学校计算机社团工作计划
- 打开计算机窗口的控制菜单,打开控制面板的几种方法
- 这张图可以帮助解释为什么欧洲有些国家欢迎难民,有些国家拒绝难民【The Washington Post】
- python数据分析与可视化从入门到精通_零基础学Python爬虫、数据分析与可视化从入门到精通...
- HTML5+CSS期末大作业:运动体育网站设计主题——体育铅球(5页)带注册 期末作业HTML代码
热门文章
- @Resource真的只是按名称来进行依赖注入吗?@Autowired真的只是按照类型来依赖注入吗?
- com.sun:tools
- MyCat基于MySQL实现读写分离
- Java Thread之Sleep()使用方法总结
- Hibernate二级缓存以及ehcache的搭建配置
- Selenium之脚本编写页面通用定位方法
- spirng 事物只支持 dml语句 update,insert delete
- 一步完成 MySQL 向 Redis 迁移
- 】oracle em配置常用命令
- html5 canvas 绘制圆角矩形