MySql存储过程基础语法摘要

来源:互联网 发布:淘宝财务报表 编辑:程序博客网 时间:2024/05/18 23:12


Delimiter $$

默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
因为mysql一遇到分号,它就要自动执行。这种情况下,就可以使用delimiter,把delimiter后面换成其它符号,如//或$$。告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了.delimiter作用就是对整个小段语句做一个简单的封装。

USE `apcg_cn_cn_test`$$
use <数据库名>
1) use 语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,
或者直到出现下一个不同的use语句:
mysql> USE db1;
mysql> SELECT COUNT(*) FROM mytable; # selects from db1.mytable
mysql> USE db2;
mysql> SELECT COUNT(*) FROM mytable; # selects from db2.mytable
2) 使用USE语句为一个特定的当前的数据库做标记,不会阻碍您访问其它数据库中的表。下面的例子可以从db1数据库访问author表,并从db2数 据库访问editor表:
mysql> USE db1;
mysql> SELECT author_name,editor_name FROM author,db2.editor
-> WHERE author.editor_id = db2.editor.editor_id;
一.创建存储过程
Create Definer =`root`@`%` procedure sp_name(in n_roleid Integer(11),, in i_rec_rid Integer(11),)
begin
...
end
二.调用/删除存储过程
1.基本语法:call sp_name() / drop procedure sp_name
注意:(1) 存储过程名称后面必须加括号,哪怕该存储过程没有参数传递;
(2) 不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程.
三.其他常用指令
1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
2.show create procedure sp_name
显示某一个MySQL存储过程的详细信息

===================================================================================================================
数据类型及
自定义变量:DECLARE a INT ; SET a=100;
语句代替 :DECLARE a INT DEFAULT 100;
变量分为用户变量和系统变量,系统变量又分为会话和全局级变量
在存储过程中使用用户变量
mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');
mysql> SET @greeting='Hello';
mysql> CALL GreetWorld( );
存储过程间传递全局范围的用户变量
mysql> CREATE PROCEDURE p1( ) SET @last_procedure='p1';
mysql> CREATE PROCEDURE p2( ) SELECT CONCAT('Last procedure was ',@last_procedure);
mysql> CALL p1( );
mysql> CALL p2( );
运算符
1.算术运算符

+ 加 SET var1 = 2+2; 4
- 减 SET var2 = 3-2; 1
* 乘 SET var3 = 3*2; 6
/ 除 SET var4 = 10/3; 3.3333
DIV 整除SET var5 = 10 DIV 3; 3
% 取模SET var6 = 10%3 ; 1
2.比较运算符
> 大于1>2 False
< 小于2<1 False
<= 小于等于 2<=2 True
>= 大于等于 3>=2 True

BETWEEN 在两值之间5 BETWEEN 1 AND 10 True
NOT BETWEEN不在两值之间5 NOT BETWEEN 1 AND 10 False
IN 在集合中5 IN (1,2,3,4) False
NOT IN 不在集合中5 NOT IN (1,2,3,4) True
= 等于2=3 False
<>, != 不等于2<>3 True
<=> 严格比较两个NULL值是否相等NULL<=>NULL True
LIKE 简单模式匹配 "Guy Harrison"LIKE "Guy%" True
REGEXP 正则式匹配 "Guy Harrison"REGEXP "[Gg]reg" False
IS NULL 为空0 IS NULL False
IS NOT NULL不为空0 IS NOT NULL True
3.位运算符
| 或
& 与
<<左移位
>>右移位
~ 非(单目运算,按位取反)
4.注释:
双横杠:-- 该风格一般用于单行注释
c风格:/* 注释内容 */ 一般用于多行注释
===================================================================================================================
流程控制
一、顺序结构
二、分支结构
if
case
三、循环结构
for循环
while循环
loop循环
repeat until循环
区块定义
begin
......
end;
也可以给区块起别名:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码。begin和end如同C语言中的{ 和 }。
===================================================================================================================
输入和输出
mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输入参数
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
BEGIN
SELECT p_in; --查询输入参数
SET p_in=2; --修改
select p_in;--查看修改后的值
END;
执行结果:
mysql> set @p_in=1
mysql> call sp_demo_in_parameter(@p_in)

mysql> select @p_in;

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

OUT 输出参数该值可在存储过程内部被改变,并可返回
创建:
mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
BEGIN
SELECT p_out;/*查看输出参数*/
SET p_out=2;/*修改参数值*/
SELECT p_out;/*看看有否变化*/
END;

执行结果:
mysql> SET @p_out=1
mysql> CALL sp_demo_out_parameter(@p_out)


mysql> SELECT @p_out;

INOUT 输入输出参数
调用时指定,并且可被改变和返回
mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;

执行结果:
set @p_inout=1
call sp_demo_inout_parameter(@p_inout) //

select @p_inout;



                                             
1 0
原创粉丝点击