有时候在面试中,我会问:存储过程有什么用?
看完今天的知识,你就知道怎么回答了。
什么是存储过程?我们先来看看官方的解释:
百度百科:存储过程是大型数据库系统中的一组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),转载请联系微信官方账号。
喜欢不要忘记分享喔~别忘了分享一下~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。