mysql 使用储存过程_为什么使用mysql储存过程?mysql储存过程简介

存储过程

需要MySQL 5 MySQL 5添加了对存储过程的支持,因此,本章内容适用于MySQL 5及以后的版本。

迄今为止,使用的大多数SQL语句都是针对一个或多个表的单条语句。并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成。例如,考虑以下的情形。

1.为了处理订单,需要核对以保证库存中有相应的物品。

2.如果库存有物品,这些物品需要预定以便不将它们再卖给别的人,并且要减少可用的物品数量以反映正确的库存量。

3.库存中没有的物品需要订购,这需要与供应商进行某种交互。

4.关于哪些物品入库(并且可以立即发货)和哪些物品退订,需要通知相应的客户。

这显然不是一个完整的例子,它甚至超出了本书中所用样例表的范围,但足以帮助表达我们的意思了。执行这个处理需要针对许多表的多条MySQL语句。此外,需要执行的具体语句及其次序也不是固定的,它们可能会(和将)根据哪些物品在库存中哪些不在而变化。

那么,怎样编写此代码?可以单独编写每条语句,并根据结果有条件地执行另外的语句。在每次需要这个处理时(以及每个需要它的应用中)都必须做这些工作。

可以创建存储过程。存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。

为什么要使用存储过程

既然我们知道了什么是存储过程,那么为什么要使用它们呢?有许多理由,下面列出一些主要的理由。

1.通过把处理封装在容易使用的单元中,简化复杂的操作。

2.由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。

3.简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点的延伸就是安全性。通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会。

4.提高性能。因为使用存储过程比使用单独的SQL语句要快。

5.存在一些只能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。换句话说,使用存储过程有3个主要的好处,即简单、安全、高性能。显然,它们都很重要。不过,在将SQL代码转换为存储过程前,也必须知道它的一些缺陷。

6.一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。

7.你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。尽管有这些缺陷,存储过程还是非常有用的,并且应该尽可能地使用。

不能编写存储过程?你依然可以使用MySQL将编写存储过程的安全和访问与执行存储过程的安全和访问区分开来。这是好事情。即使你不能(或不想)编写自己的存储过程,也仍然可以在适当的时候执行别的存储过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql查看表结构修改记录表_MySQL 表结构查看以及表结构修改

使用MySql数据库时,如果对表字典不够熟悉,我们就需要查看表结构。如果数据库是在远程linux上部署,很多时候我们只能通过mysql的命令来查看表结构。同样,如果我们想要修改表结构,添加、删除、修改列时,也只能…

69讲入门python_Python入门,一定要吃透这69个内置函数

内置函数就是Python预先定义的函数,这些内置函数使用方便,无需导入,直接调用,大大提高使用者的工作效率,也更便于程序的阅读。截止到Python版本3.9.1,Python一共提供了69个内置函数。如果你还没入门&#x…

imgkit分辨率_pythonhtml2image: imgkit 和 wkhtmltoimage的坑

场景需要根据信息,将一个动态页面生成图片。经过调研,发现只有imgkit符合要求。imgkit其实是调用wkhtmltopdf的wkhtmltoimage(wkhtmltopdf包含wkhtmltopdf和wkhtmltoimage两个工具)来实现功能。wkhtmltopdf和wkhtmltoimage是通过调用QT来实现功能&#x…

mysql sql组合_详解mysql 组合查询

使用UNION多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)有两种情况需要使用组合查询:在单个表查询中从不同的表返回类似结构的…

mysql 共享表空间存储_MySQL InnoDB共享表空间

简介ibdata1ibdata1文件是InnoDB存储引擎的共享表空间文件,存放位置my.ini 中的 datadir"D:\phpStudy\MySQL\data",目录下。查看innode_file_per_table 参数的状态show variables like %per_table;表空间Innodb存储引擎可将所有数据存放于ibda…

python36中文手册_python36中文手册_python_36_文件操作4

fopen(test.txt,a,encodingutf-8)#f.truncate()#截断,不指定将清空所有内容f.truncate(5)#从头开始截断,截断5个字符 注:使用f.seek()改变光标位置不顶用f.close()fopen(yesterday,r,encodingutf-8)#读写文件print(f.readline())print(f.read…

bigdecimal负数变正数_BigDecimal的用法详解

BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广…

mysql 表引擎 entity framework_EntityFramework之数据库以及表基本创建(一)

前言之前有学过EF一段时间那时EF才4.0似乎还不太稳定,而现在EF都已7.0版本,同时AspNet Identity都与此大有关联,看来是大势所趋于是开始学习EF,在学EF过程中也遇到一些小问题,特此录下,以备忘!数…

mysql+linux+无法启动服务无法启动不了_Linux实例中MySQL服务常见的无法启动或启动异常处理...

概述本文介绍了在Linux实例中,MySQL常见的无法启动或启动异常处理方法。详细描述常见问题处理描述,目录如下。提示:MySQL错误日志通常记录在/alidata/log/mysql/error.log文件下。MySQL配置文件my.cnf权限问题导致无法启动,错误提…

python3缺少pip_Ubuntu中找不到pip3命令的解决方法

Ubuntu中找不到pip3命令的解决方法Ubuntu 有 python2 和 python3。今天使用 Ubuntu 中的 python3 时,想要安装第三方库却发现 pip 指向的是 python2 。因为记得 Ubuntu 系统默认将 python3 的 pip 命令改成了 pip3,于是执行 pip3 -V ,报命令不…

python库迁移到没有网的电脑_python实现数据库跨服务器迁移

数据库从一个服务器转移到另外一个服务器,怎么转?你可以用一分钟遇见一个人,用一小时了解一个人,用一天爱上一个人,但是你却要用一辈子忘记一个人。分离,附加?还是备份、还原?具体过…

45道mysql数据库题目_MySQL 45道练习题

--1、 查询Student表中的所有记录的Sname、Ssex和Class列。SELECT sname,ssex,class FROMstudent;--2、查询教师所有的单位即不重复的Depart列SELECT DISTINCT depart FROMteacher;--3、查询Student表的所有记录。SELECT * FROMstudent;--4、查询Score表中成绩在60到80之间的所…

linux mysql revoke_Linux环境下MySQL基础命令(4)----数据库的用户授权

MySQL数据库的root用户拥有对所有库,表的全部权限,频繁的使用root用户会给数据库带来很大的风险,因此应建立一些低权限用户,只负责一部分库、表的管理维护操作,甚至可以对增、删、改、查各个操作进一步细化限制&#x…

mysql更改表 值_如何更改MySQL表中行实例的值?

UPDATE命令以及WHERE子句可用于更改行实例的值。基本上,MySQL将根据查询中给出的条件更改值。下面的例子可以证明它假设我们想在下面给出的“测试”表中将名称从“ Ram”更改为“ Mohit”-mysql> Select * from testing;-------------| Id | Name |----------…

java创建型_Java创建型模式

Java创建型模式在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。创建型模式…

java interface 实例_Java - Interface 接口的实现方式实例

在程序的开发中,需要完成两个数的求和运算和比较运算功能的类非常多。那么可以定义一个接口来将类似的功能组织在一起。下面创建一个示例,具体介绍接口的实现方式。1)创建一个名称为 IMath 的接口,代码如下:1 public interfaceIMa…

java查看 被应用_java – 如何查看应用程序正在使用的当前堆大小?

使用此代码:// Get current size of heap in byteslong heapSize Runtime.getRuntime().totalMemory();// Get maximum size of heap in bytes. The heap cannot grow beyond this size.// Any attempt will result in an OutOfMemoryException.long heapMaxSize …

java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区

一、Java GC 概念说明Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不…

上古卷轴5java8_【图片】【上古卷轴5】【无心】个人整合版8.0【霜刃伤情吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼GameModeSkyrimSkyrim.esm1Update.esm1Unofficial Skyrim Patch.esp1Dawnguard.esm1Unofficial Dawnguard Patch.esp1HearthFires.esm1Unofficial Hearthfire Patch.esp1Dragonborn.esm1Unofficial Dragonborn Patch.esp1Skyrim Pr…

java反射 虚拟机优化_面试官问我:Java反射是什么?我回答竟然不上来......

每天凌晨00点00分,第一时间与你相约每日英文We all have moments of desperation. But if we can face them head on, that’s when we find out just how strong we really are.我们都有绝望的时候,只有在勇敢面对时,我们才知道我们有多坚强。每日掏心话…