sql 存储过程

有时候在面试中,我会问:存储过程有什么用?

看完今天的知识,你就知道怎么回答了。

sql 存储过程什么是存储过程?我们先来看看官方的解释:

百度百科:存储过程是大型数据库系统中的一组SQL语句,存储在数据库中完成特定的功能。一旦编译,它就永久有效,并且可以通过调用语句重用。

维基百科:存储过程,也称为存储过程,是在数据库中访问复杂程序以便调用外部程序的数据库形式。它可以被视为数据库的一个“函数”或“子程序”。

简单来说,SQL语句是封装的,可以用简单的语句调用,这样就不用重复写同一个SQL,提高工作效率。

如何使用存储过程?这就像分三步把一头大象放进冰箱:

(1)打开编辑器;

(2)定义存储过程;

(3)调用存储过程。

接下来,详细解释如何定义存储过程:

1不带参数的存储过程

即没有参数的存储过程,基本语法格式是:

创建过程& lt存储过程名>;

开始

& ltSQL语句>;;

结束;

示例:在这里,我们使用学生信息表st_info6来查询学生的姓名:

SQL语句:

选择不同的名称

来自st _ info6

-查询结果:

+ – +

|姓名|

+ – +

|王思瑶|

|王

李若彤

+ – +

集合中的3行(0.00秒)

将它放在存储过程中,并将其命名为get_st_name:

创建过程get_st_name

开始

选择不同的名称

来自st _ info6

结束;

然后使用call拨打电话:

mysql & gt调用get _ st _ name

+ – +

|姓名|

+ – +

|王思瑶|

|王

李若彤

+ – +

集合中的3行(0.00秒)

2个带参数的存储过程

调用存储过程时,必须带特定的参数。基本语法格式是:

创建过程& lt存储过程名>;([参数名称][参数类型])

开始

& ltSQL语句>;;

结束;

示例:使用学生信息表st_info6查找性别分别为“男”和“女”的学生姓名:

SQL语句:

-查询男同学的姓名:

mysql & gt选择不同的名称

-& gt;来自st_info6

-& gt;其中性别= ‘男性’;

+ – +

|姓名|

+ – +

李若彤

+ – +

集合中的1行(0.01秒)

-查询女同学的名字

mysql & gt选择不同的名称

-& gt;来自st_info6

-& gt;其中性别= ‘女性’;

+ – +

|姓名|

+ – +

|王思瑶|

|王

+ – +

集合中的第2行(0.00秒)

如果将上述语句放在存储过程中:

创建过程get_st_name(sex varchar(4))

开始

选择不同的名称

来自st_info6

其中性别=性;

结束;

再次呼叫:

-查询男同学的姓名:

mysql & gt调用get _ ST _ name(‘ male ‘);

+ – +

|姓名|

+ – +

李若彤

+ – +

-查询女同学的姓名:

mysql & gt调用get_st_name(‘女性’);

+ – +

|姓名|

+ – +

|王思瑶|

|王

+ – +

[注意]

存储过程默认在当前数据库中创建,其名称需要避免与MySQL内置函数名称重复,无论是否带参数,都需要括号。

在带参数的存储过程中,参数名不能与数据表的字段名相同,否则不会过滤条件,也不会报错。

参数列表由逗号“,”分隔

SQL语句必须后跟“;”

存储过程的优缺点

优点存储过程的优点和缺点

高性能:创建时只需要编译,存储在数据库服务器中,可以直接在服务器中运行,因此可以有效提高数据库的执行速度;

可重用性:因为SQL语句是封装的,所以只需调用它们就可以重用。

降低网络负载:如果存储过程中有多次数据交互,可以降低服务器的网络负载,如果是简单的SQL语句就差不多了;

安全性:需要对指定用户进行授权,可以防止SQL注入攻击;

灵活性:可以使用流程控制语句,灵活性强,可以完成和解决一些复杂的业务逻辑问题。

劣势

调试困难:由于IDE问题,存储过程的调试比普通程序更困难,PL/SQL Developer可以在一定程度上弥补这一缺点。

移植问题:一般来说,stone是绑定了数据库的,所以移植会比较困难,但是如果是工程项目,这个问题就不存在了;

权限:为了安全起见,并不是每个人都有这个权限,所以可能只有少数人有权限;

维护困难:一般情况下,复杂业务逻辑的代码可读性差,维护困难;

结束

更多实用的SQL技巧稍后分享。

希望能帮到大家~

本文供爱数据学院作者重置。

首发于爱统计网(ID:cntongji),转载请联系微信官方账号。

喜欢不要忘记分享喔~别忘了分享一下~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论