mysql存储过程详细教程
记录MYSQL存储过程中的关键语法:
DELIMITER // 声明语句结束符,⽤于区分;
CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程
BEGIN .... END存储过程开始和结束符号
SET @p_in=1变量赋值
DECLARE l_int int unsigned default4000000; 变量定义
什么是mysql存储例程?
存储例程是存储在数据库服务器中的⼀组sql语句,通过在查询中调⽤⼀个指定的名称来执⾏这些sql语句命令。
为什么要使⽤mysql存储过程?
打织梦是什么
我们都知道应⽤程序分为两种,⼀种是基于web,⼀种是基于桌⾯,他们都和数据库进⾏交互来完成数据的存取⼯作。假设现在有⼀种应⽤程序包含了这两种,存储过程(stored procedure)、存储例程(store routine)、存储函数区别
Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
其中存储过程主要完成在获取记录或插⼊记录或更新记录或删除记录,即完成select insert delete update等的⼯作。⽽存储函数只完成查询的⼯作,可接受输⼊创建mysql存储过程、存储函数
create procedure存储过程名(参数)
存储过程体类风湿性关节炎吃什么食物好
create function存储函数名(参数)
下⾯是存储过程的例⼦:
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-
> BEGIN
-> SELECT COUNT(*) INTO s FROM user;
-> END
-> //
mysql> DELIMITER ;
注:
(1)这⾥需要注意的是DELIMITER//和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译(2)存储过程根据需要可能会有输⼊、输出、输⼊输出参数,这⾥有⼀个输出参数s,类型是int型,如果有多个参数⽤","分割开。
(3)过程体的开始与结束使⽤BEGIN与END进⾏标识。
这样,我们的⼀个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。
(2). 声明分割符
其实,关于声明分割符,上⾯的注解已经写得很清楚,不需要多说,只是稍微要注意⼀点的是:如果是⽤MySQL的Administrator管理⼯具时,可以直接创建,不
(3). 参数
MySQL存储过程的参数⽤在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名数据类形...])
IN输⼊参数:表⽰该参数的值必须在调⽤存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT输出参数:该值可在存储过程内部被改变,并可返回
INOUT输⼊输出参数:调⽤时指定,并且可被改变和返回
Ⅰ. IN参数例⼦
创建:
1. mysql > DELIMITER //
2. mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)
3. -> BEGIN
4. -> SELECT p_in;
5. -> SET p_in=2;
6. -> SELECT p_in;
7. -> END;
8. -> //
9. mysql > DELIMITER ;
执⾏结果:
1. mysql > SET @p_in=1;
2. mysql > CALL demo_in_parameter(@p_in);
3. +------+
4. | p_in |
5. +------+
6. | 1 |
7. +------+
8.
9. +------+
10.| p_in |
11.+------+
12.| 2 |
13.+------+
14.
16.+-------+
17.| @p_in |
18.+-------+
19.| 1 |
20.+-------+
以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值
Ⅱ.OUT参数例⼦
创建:
1. mysql > DELIMITER //
2. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)
2. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)
3. -> BEGIN
4. -> SELECT p_out;
5. -> SET p_out=2;
6. -> SELECT p_out;
7. -> END;
8. -> //
9. mysql > DELIMITER ;
执⾏结果:
1. mysql > SET @p_out=1;
2. mysql > CALL sp_demo_out_parameter(@p_out);
3. +-------+
4. | p_out |
5. +-------+
6. | NULL |
7. +-------+
8.
9. +-------+
10.| p_out |
11.+-------+
12.| 2 |mysql查看所有存储过程
13.+-------+
14.
16.+-------+
17.| p_out |
18.+-------+
19.| 2 |
20.+-------+
Ⅲ. INOUT参数例⼦
创建:
1. mysql > DELIMITER //
2. mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
3. -> BEGIN
4. -> SELECT p_inout;
5. -> SET p_inout=2;
6. -> SELECT p_inout;
7. -> END;
8. -> //
9. mysql > DELIMITER ;
执⾏结果:
1. mysql > SET @p_inout=1;
2. mysql > CALL demo_inout_parameter(@p_inout) ;
3. +---------+
4. | p_inout |
5. +---------+
6. | 1 |
7. +---------+
8.
9. +---------+
10.| p_inout |
11.+---------+
12.| 2 |
13.+---------+
14.
16.+----------+
17.| @p_inout |
18.+----------+
19.| 2 |
20.+----------+
(4). 变量
Ⅰ. 变量定义
局部变量声明⼀定要放在存储过程体的开始
DECLAREvariable_name [,] datatype [DEFAULT value];
其中,datatype为MySQL的数据类型,如:int, float, date,varchar(length)
例如:
1. DECLARE l_int int unsigned default4000000;
2. DECLARE l_numeric number(8,2) DEFAULT9.95;
3. DECLARE l_date date DEFAULT '1999-12-31';
4. DECLARE l_datetime datetime DEFAULT '1999-12-3123:59:59';
5. DECLARE l_varchar varchar(255) DEFAULT'This will not be padded';
Ⅱ. 变量赋值
SET 变量名 = 表达式值 [,variable_name = expression ...]
Ⅲ. ⽤户变量
ⅰ. 在MySQL客户端使⽤⽤户变量
1. mysql > SELECT'Hello World' into @x;
2. mysql > SELECT @x;
3. +-------------+
4. | @x |
5. +-------------+
6. | Hello World |
7. +-------------+
8. mysql > SET @y='Goodbye Cruel World';
9. mysql > SELECT @y;
10.+---------------------+
11.| @y |
12.+---------------------+
13.| Goodbye Cruel World |
14.+---------------------+
15.
18.+------+
19.| @z |
20.+------+
21.| 6 |
22.+------+
ⅱ. 在存储过程中使⽤⽤户变量
1. mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');
2. mysql > SET @greeting='Hello';
3. mysql > CALL GreetWorld( );
4. +----------------------------+
5. | CONCAT(@greeting,' World') |
6. +----------------------------+
7. | Hello World |
8. +----------------------------+
ⅲ. 在存储过程间传递全局范围的⽤户变量
1. mysql> CREATE PROCEDURE p1() SET @last_procedure='p1';
2. mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_procedure);
html简单网页代码有图片3. mysql> CALL p1( );
4. mysql> CALL p2( );
5. +-----------------------------------------------+
6. | CONCAT('Last procedure was ',@last_proc |
7. +-----------------------------------------------+
8. | Last procedure was p1 |
9. +-----------------------------------------------+
注意:
①⽤户变量名⼀般以@开头
②滥⽤⽤户变量会导致程序难以理解及管理
(5). 注释
MySQL存储过程可使⽤两种风格的注释
双模杠:--
该风格⼀般⽤于单⾏注释
c风格:⼀般⽤于多⾏注释
例如:
1. mysql > DELIMITER //
2. mysql > CREATE PROCEDURE proc1 --name存储过程名
3. -> (IN parameter1 INTEGER)
4. -> BEGIN
5. -> DECLARE variable1 CHAR(10);
6. -> IF parameter1 = 17THEN
7. -> SET variable1 = 'birds';
8. -> ELSEignore的ing形式
9. -> SET variable1 = 'beasts';
10. -> END IF;
11. -> INSERT INTO table1 VALUES (variable1);
12. -> END
13. -> //
4. MySQL存储过程的调⽤
⽤call和你过程名以及⼀个括号,括号⾥⾯根据需要,加⼊参数,参数包括输⼊参数、输出参数、输⼊输出参数。具体的调⽤⽅法可以参看上⾯的例⼦。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论