存储过程与SQL语句的区别

         存储过程(Stroed Proceduer)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后,存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程有参数)来执行它。再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以鸡块的速度执行。

         SQL语句即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。

         存储过程包含SQL语句。

         存储过程的代码建立与规则,已经在之前的文章中涉及该篇不再赘述,点击链接查看:存储过程的创建与修改存储过程的创建规则

存储过程的优点:

存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。

1.具有更好的性能

存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速度。

2.功能实现更加灵活

存储过程中可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。

3.减少网络传输

复杂的业务逻辑需要多条 SQL 语句,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会减少,降低了网络负载。

4.具有更好的安全性

 (1)数据库管理人员可以更好的进行权限控制,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

(2)在通过网络调用过程时,只有对执行过程的调用是可见的。无法看到表和数据库对象名称,不能嵌入SQL 语句,有助于避免 SQL 注入攻击。

存储过程的弊端:

1.架构不清晰,不够面向对象

 存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,

2.开发和维护要求比较高

存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。 

3.可移植性差

过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。

存储过程与SQL语句如何抉择

架构设计没有绝对,只有在当前的场景下最合适的。

普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。

(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程
(2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程
(3)比较复杂的统计和汇总可以考虑应用后台存储过程

资料来源:https://www.cnblogs.com/binyue/p/6442310.html

存储过程与sql语句的区别:

1、编写

存储过程:编写比较难;

sql语句:相对简单;

2、性能

存储过程:高,可移植性高,复用性高;

sql语句:低,可移植性差,不可复用;

3、安全

存储过程:比sql语句相对来说安全;

sql语句:参数化比较安全;

4、网络传输

存储过程:数据量小,减少网络数据传输量,只需存储过程名即可;

sql语句:数据类量大,占用带宽大;

5、速度

存储过程:速度快,已经编译过了;

sql语句:预编译,执行一行编译一行;

资料来源:https://www.cnblogs.com/zlp520/p/3553559.html

 

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
存储过程SQL 语句实现通常包含以下几个方面: 1. 创建存储过程: 使用 CREATE PROCEDURE 语句创建存储过程,语法格式如下: ``` CREATE PROCEDURE procedure_name [ { IN | OUT | INOUT } parameter_name data_type [, ...] ] BEGIN -- 存储过程SQL 语句 END; ``` 其中 procedure_name 是存储过程的名称,parameter_name 是输入或输出参数的名称,data_type 是参数的数据类型。在 BEGIN 和 END 之间编写存储过程SQL 语句。 2. 执行存储过程: 使用 CALL 语句执行存储过程,语法格式如下: ``` CALL procedure_name(parameter_value1, parameter_value2, ...); ``` 其中 procedure_name 是存储过程的名称,parameter_value 是输入参数的值。 3. 输入参数: 在存储过程的参数列表中使用 IN 关键字定义输入参数,语法格式如下: ``` IN parameter_name data_type ``` 其中 parameter_name 是输入参数的名称,data_type 是参数的数据类型。 4. 输出参数: 在存储过程的参数列表中使用 OUT 关键字定义输出参数,语法格式如下: ``` OUT parameter_name data_type ``` 其中 parameter_name 是输出参数的名称,data_type 是参数的数据类型。 5. 输入输出参数: 在存储过程的参数列表中使用 INOUT 关键字定义输入输出参数,语法格式如下: ``` INOUT parameter_name data_type ``` 其中 parameter_name 是输入输出参数的名称,data_type 是参数的数据类型。 6. 返回值: 存储过程可以使用 RETURN 语句返回一个值,语法格式如下: ``` RETURN return_value; ``` 其中 return_value 是要返回的值。 总之,存储过程SQL 语句实现包括创建存储过程、执行存储过程、定义输入、输出和输入输出参数、返回值等方面,需要根据实际需求编写相应的 SQL 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值