IT实战联盟博客:http://blog.100boot.cn

前言

之前我们分享了MySql的性能优化、索引详解等内容,本篇文章主要是针对想要入门MySql存储过程的读者而写的。主要实现的业务是订单库里面的超过30分钟没有支付的订单全部置为失效订单。

创建订单表

CREATE TABLE `shop_order` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单ID',`good_id`int(11) NOT NULL COMMENT '商品ID',`order_amount` decimal(11,2) NOT NULL COMMENT '订单金额',`status` varchar(10) NOT NULL COMMENT '订单状态:0:交易待支付,1:交易支付中,2:交易成功、3:交易关闭',`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',`update_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商城订单表';

插入测试数据

insert into shop_order(id,good_id,order_amount,status, create_date, update_date)values(1,1,99.00,0,NOW(),NOW());
insert into shop_order(id,good_id,order_amount,status, create_date, update_date)values(2,3,126.00,0,NOW(),NOW());
insert into shop_order(id,good_id,order_amount,status, create_date, update_date)values(3,9,45.00,0,NOW(),NOW());

如下图所示:

编写存储过程定时任务

BEGINUPDATE `shop_order` AS order_ setorder_.`status` = '3' WHERE 1 = 1 AND order_.status = '0' AND TIMESTAMPDIFF(MINUTE, order_.`create_date`, NOW()) > 30;END

解读:存储过程执行的时候如果超过30分钟并且订单状态为0(交易待支付)的订单修改状态为3(已失效)。

设置定时计划

备注:时间可以根据具体情况进行调整哦!

总结

存储过程的优点

(1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。(2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。(3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。(4).减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。(5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

存储过程的弊端

1.架构不清晰,不够面向对象存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,2.开发和维护要求比较高存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。3.可移植性差过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。

使用场景

普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程(2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程(3)比较复杂的统计和汇总可以考虑应用后台存储过程

关注我们

可以关注“IT实战联盟”公*众*号并留言也可以加入交流群和作者互撩哦~~~

IT实战联盟博客:http://blog.100boot.cn

MySql实战篇:写一个简单的存储过程,完成订单定时任务相关推荐

  1. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  2. ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  3. 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  4. 用CSS写一个简单的幻灯片效果页面

    这里是修真院前端小课堂,本篇分析的主题是 [用CSS写一个简单的幻灯片效果页面] 每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方 ...

  5. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  6. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  7. 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

  8. 怎样写一个简单的操作系统?(原文标题:How to write a simple operating system) 分类: 翻译 2011-01-26 01:10 3175人阅读 评论(3) 收藏

    怎样写一个简单的操作系统?(原文标题:How to write a simple operating system) 分类: 翻译2011-01-26 01:10 3175人阅读 评论(3) 收藏 举 ...

  9. 自己动手写一个简单的bootloader

    自己动手写一个简单的bootloader 15年10月31日19:44:27 (一) start.S 写这一段代码前,先要清楚bootloader开始的时候都做什么了.无非就是硬件的初始化,我们想要写 ...

  10. 小白教程——Windows下用PHP写一个简单的登录注册页面(二)

    哈喽,看到这里希望小伙伴们都把wampserver环境安装好了,如果还没有安装或创建数据表就移步去看我上一篇文章吧.OK~接下我们将进入代码实现部分,首先我们需要一个文本编辑器,可以是电脑自带的not ...

最新文章

  1. Adobe Prelude 2020中文版
  2. Hybris PriceRow的存储定义
  3. 19级:班级日常分享 | 一天一瞬间
  4. stm32滴答计时器_stm32笔记:Systick系统滴答定时器
  5. 推荐5款好用的安卓版RSS应用
  6. 首届FineReport平台主题设计大赛火热启动
  7. WebService远程调试
  8. k3c最新官改非常稳定了_软件聚分享库APP最新版下载-软件聚分享库v1.0.0安卓版下载...
  9. 主流的推荐系统算法总结
  10. 教您在Excel中批量生成二维码
  11. 舞台音效控制软件_舞台音乐控制软件下载
  12. 帝国cms 首页php,帝国CMS新增加专题页面
  13. Python+Django+MySQL资产管理系统
  14. Scrum板与Kanban如何抉择?jlqpzlmlp板与按照znbpdl
  15. iframe 如何禁止视频自动播放
  16. 宽字符处理函数函数与普通函数对照表
  17. DDD中的值对象和实体
  18. c#取消word修订痕迹_C# 操作Word批注(一) 插入、修改、删除Word批注
  19. 网页中LRC歌词同步显示
  20. Abaqus GUI程序开发之常用的Abaqus内核指令(一)

热门文章

  1. Linux 内存管理(一)——地址空间
  2. 2个YUV视频 拼接技术
  3. RTMP 协议学习总结
  4. Linux电源管理(2)_Generic PM之基本概念和软件架构
  5. L1- 017——024
  6. 2017.07.16小组赛题目I
  7. 单例模式(Singleton mode)实战讲解
  8. scala中map与flatMap浅析
  9. 题目263-精 挑 细 选
  10. Max and Min---递归