大家好,小信来为大家解答以上问题。mysql存储过程执行权限,mysql存储过程很多人还不知道,现在让我们一起来看看吧!
1、 存储过程是SQL语句和控制语句的预编译集合,它们存储在一个名称下并作为一个单元进行处理。存储过程存储在数据库中,可以由应用程序调用和执行,允许用户声明变量和控制进程。存储过程可以接收参数(输入类型参数、输出类型参数),并且可以有多个返回值。因此,存储过程的执行效率高于单个SQL命令。
2、 1.增强SQL语句的功能和灵活性。
3、 2.实现更快的执行速度。当客户端第一次调用存储过程时,MySQL引擎会对其进行解析和编译,然后将编译后的结果存储在内存中,所以第一次的效率和以前是一样的。但是以后会直接调用内存中的编译结果,效率会提高。
4、 3.减少网络流量。单个SQL语句有大量的字符,但是通过调用存储过程,只需要传递存储过程的名称和相关参数,提交给服务器的数据量相对较小。
5、 创造
6、 [定义者={用户|当前用户}]
7、 过程sp_name([proc_parameter[,]])
8、 [特点.]例程_正文
9、 过程参数:
10、 [ IN | OUT | INOUT ]参数名称类型
11、 IN指示在调用存储过程时必须指定此参数的值,并且不能返回。
12、 OUT表示该参数的值可以被存储过程更改,并且可以被返回。
13、 INOUT表示该参数是在调用时指定的,并且可以更改和返回。
14、 COMMENT ' string ' | {包含SQL |无SQL |读取SQL数据|修改SQL数据}| SQL安全{DEFINER | INVOKER}
15、 评论:评论
16、 包含SQL:包含SQL语句,但不包含读取或写入数据的语句。
17、 NO SQL:不包含SQL语句。
18、 读取SQL数据:包含读取数据的语句。
19、 修改SQL数据:包含写数据的语句。
20、 Security {definer | invoker}:表示谁有执行的权限。
21、 1.流程主体由合法的SQL语句组成;
22、 2.过程体可以是“任意”SQL语句(这里的任意主要指记录的添加、删除和查询,多表连接);
23、 3.如果流程主体是复合结构,请使用BEGIN.END语句;
24、 4.复合结构可以包含声明、循环和控制结构。
25、 创建过程sp1()选择版本();
26、 方法一:调用sp _ name([参数[,]])如果存储过程包含参数,则必须有括号。
27、 方法2:调用sp_name[()]如果存储过程不包含参数,括号是可选的。
28、 更改过程sp _ name[特征.]
29、 COMMENT 'string'|{包含SQL |无SQL |读取SQL数据|修改SQL数据}| SQL安全{ DEFINER | INVOKER }
30、 您只能修改存储过程中的注释和当前内容的类型,而不能修改过程体。要修改过程体,您需要首先删除存储过程,然后重新构建它。
31、 DROP PROCEDURE[如果存在] sp_name
32、 分隔符//
33、 创建过程remove user byid(IN p _ id INT UNSIGNED)
34、 开始
35、 从id=p_id的用户中删除;
36、 END//
37、 分隔符;
38、 在这里,调用存储过程,如下图所示:
39、 分隔符//
40、 创建过程removeandreturnusernums(IN p _ id INT UNSIGNED,OUT userNums INT UNSIGNED)
41、 开始
42、 从id=p_id的用户中删除;
43、 选择从用户到用户数的计数(id );
44、 结束
45、 //
46、 分隔符;
47、 1.用户变量:以“@”开头,采用“@变量名”的形式
48、 变量绑定到mysql客户端,设置的变量只在当前用户使用的客户端上生效。
49、 SET @ I=7;
50、 2.全局变量:定义时,它以以下两种形式出现:set GLOBAL variable name或set @@global。变量名。
51、 对所有客户有效。只能用超级权限设置全局变量。
52、 3.会话变量:仅对连接的客户端有效。
53、 4.局部变量:范围在begin和end语句块之间。语句块中设置的变量
54、 Declare语句专门用于定义局部变量。Set语句是设置不同类型的变量,包括会话变量和全局变量。
55、 让我们调用存储过程。
56、 调用removeAndReturnUsersNums(1,@ nums);
57、 分隔符//
58、 CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p _ age SMALLINT UNSIGNED,OUT deleteUsers SMALLINT UNSIGNED,OUT userCounts SAMLLINT UNSIGNED)
59、 开始
60、 从年龄=p_age的用户中删除;
61、 SELECT ROW _ COUNT()INTO delete users;
62、 从用户到用户计数中选择计数(id );
63、 结束
64、 //
65、 分隔符;
66、 [注意]ROW_COUNT()函数用于获取插入、删除和更新的受影响记录的总数。
67、 让我们调用存储过程。
68、 调用removeUserByAgeAndReturnInfos(20,@a,@ b);
69、 【注意】@a表示删除的记录数,@b表示剩余的记录数。
70、 选择@a,@ b;
71、 1.存储过程实现的函数更复杂;而且功能更有针对性。
72、 2.存储过程可以返回多个值;一个函数只能有一个返回值。
73、 3.存储过程通常是独立执行的;而函数主要作为其他SQL语句的组件出现。
本文到此结束,希望对大家有所帮助。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!