1存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中 2 3 4 5一、创建存储过程 6 7 8语法格式: 9 10create procedure sp_name ( [ proc_parameter[……] ] ) 11 12 [ characteristic…… ] routine_body 13 14 15sp_name:存储过程的名称; 16 17proc_parameter:存储过程的参数列表; 18 19characteristic:指定存储过程的特性; 20 21routine_body:是SQL代码的内容。 22 23 24注意:可以用begin……end来标志SQL代码的开始和结束。 25 26------------------------------------------------------------------------- 27 28proc_parameter:存储过程的参数列表; 29 30proc_parameter中的每一个参数由3个部分组成。这3部分分别是 输入输出类型、参数名称、参数类型。 31 32 33形式如下: 34 35 36[ IN | OUT | INOUT ] param_name type 37 38 39IN:表示输出参数; 40 41OUT:表示输出参数; 42 43INOUT:表示既可以是输入,也可以是输出; 44 45 46 47param_name:表示存储过程的参数名称; 48 49 50type:指定存储过程的参数类型,该类型可以是mysql数据库的任意数据类型; 51 52------------------------------------------------------------------------ 53------------------------------------------------------------------------ 54 55characteristic:指定存储过程的特性; 56 57 58characteristic参数有多个取值。说明如下: 59 60 61 62LANGUAGE SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统的默认的语言; 63 64 65+++++++++++++++++++ 66 67 68[ NOT ] DETERMINISTIC:指明存储过程的执行结果是否是确定的。 69 70 71 DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。 72 73 74 NOT DETERMINISTIC表示结果是非确定的,相同的输入可能得到不同的输出。 75 76 77 默认情况下,结果是非确定的, 78 79 80++++++++++++++++++++++++ 81 82 83{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATE }:指明子程序使用SQL语句的限制。 84 85 86CONTAINS SQL:表示子程序包含SQL语句,但不包含读或写数据的语句; 87 88NO SQL:表示子程序中不包含SQL语句; 89 90READS SQL DATA:表示子程序中包含读数据的语句; 91 92MODIFIES SQL DATE:表示子程序中包含写数据的语句。 93 94 95默认情况下:系统会自定为:CONTAINS SQL 96 97 98+++++++++++++++++++ 99 100 101SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。 102 103DEFINER:表示只有定义者自己才能执行; 104 105INVOKER:表示调用者可以执行; 106 107 108默认情况下,系统指定的权限是DEFINER 109 110++++++++++++++++++++++++++++++++++++++++++ 111 112COMMENT'string':注释信息 113 114 115 116------------------------------------------------------------------------ 117------------------------------------------------------------------------ 118 119 120 121注意:创建存储过程时,系统默认指定CONTAINS SQL,表示存储过程中使用了SQL语句。但是如果存储过程中没有使用SQL语句; 122 123 最好设置为NO SQL。而且,存储过程中,最好在COMMENT部分对存储过程进行简单注释。 124 125=========================================================================================== 126=========================================================================================== 127=========================================================================================== 128 129举例: 130 131 132create procedure num_from_employee( IN emp_id INT,OUT count_num INT ) 133 134reads sql date 135 136begin 137 138 select count(*) into count_num from employee where d_id = emp_id; 139 140end 141 142 143 144具体执行程序: 145 146delimiter&& 147 148create procedure num_from_employee( IN emp_id INT,OUT count_num INT ) 149 150READS SQL DATA 151 152begin 153 154 select count(*) into count_num from employee where d_id = emp_id; 155 156end && 157 158delimiter ; 159 160 161 162 163二 创建存储函数 164 165语法格式: 166 167create function sp_name ( [func_parameter[,……]] ) 168 169returns type 170 171[ characteristic……] routine_body 172 173 174 175sp_name:存储函数的名称; 176 177 178func_parameter:存储函数的参数列表; 179 180 181returns type:指定返回值的类型; 182 183 184characteristic:指定存储函数的特性,该参数的取值和存储过程的取值一样的; 185 186 187routine_body:是SQL代码的内容,可以用BEGIN……END来标志SQL代码的开始和结束。 188 189 190 191================================================================================= 192 193举例: 194 195create function name_from_employee ( emp_id int ) 196 197returns varchar(20) 198 199begin 200 201 return ( select name from employee where num = emp_id ); 202 203end 204 205 206具体执行程序: 207 208delimiter && 209 210create function name_from_employee ( emp_id int ) 211 212returns varchar(20) 213 214begin 215 216 return ( select name from employee where num = emp_id ); 217 218end && 219 220delimiter;PS:注意:MYSql中默认的语句结束符号为分号 ; 存储过程中的SQL语句需要分号来结束。为了避免冲突,首先用DELIMITER&& 将mysql的结束符号设置为&&,最后再改过来。 存储函数也是一样。
mysql——定义——存储过程和函数——概念
Wesley13
2021-10-11
1156 0 0
点赞
收藏
评论区
加载中...