Mysql学习之存储过程
存储过程小结
1:基本语法
1 | DELIMITER // |
2:参数 in|out|inout
2.1:IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
1 | DELIMITER // |
2.2:OUT:该值可在存储过程内部被改变,并可返回
1 | #存储过程OUT参数 |
2.3:INOUT:调用时指定,并且可被改变和返回
1 | #存储过程INOUT参数 |
3.变量赋值
语法:SET 变量名 = 变量值 [,变量名= 变量值 …]
用户变量
用户变量一般以@开头
注意:滥用用户变量会导致程序难以理解及管理
- 在MySQL客户端使用用户变量
1
2
3
4
5
6
7
8
9
10SELECT 'Hello World' into @x;
SELECT @x;
SET @y='Goodbye Cruel World';
SELECT @y;
SET @z=1+2+3;
SELECT @z;
#执行结果:
@x Hello World
@y Goodbye Cruel World
@z 6 - 在存储过程中使用用户变量
1
2
3
4
5CREATE PROCEDURE GreetWorld() SELECT CONCAT(@greeting,' World');
SET @greeting='Hello';
CALL GreetWorld();
#执行结果:
coucat(@greeting,' World') Hello world - 在存储过程间传递全局范围的用户变量
1
2
3
4
5
6CREATE PROCEDURE p1() SET @last_proc='p1';
CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_proc);
CALL p1();
CALL p2();
#执行结果
Last procedure was p1注释
MySQL存储过程可使用两种风格的注释:
双杠:–,该风格一般用于单行注释
C风格: 一般用于多行注释
MySQL存储过程的调用
用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。
4.MySQL存储过程的查询
- 查询存储过程
1
2
3SELECT name FROM mysql.proc WHERE db='数据库名';
SELECT routine_name FROM information_schema.routines WHERE routine_schema='数据库名';
SHOW PROCEDURE STATUS WHERE db='数据库名'; - 查看存储过程详细信息
1
SHOW CREATE PROCEDURE 数据库.存储过程名;
MySQL存储过程的修改
1 | ALTER PROCEDURE 更改用CREATE PROCEDURE |
建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。
1 | ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...] |
实例:
1 | #将读写权限改为MODIFIES SQL DATA,并指明调用者可以执行。 |
1 | #将读写权限改为READS SQL DATA,并加上注释信息'FIND NAME'。 |
MySQL存储过程的删除
1 | DROP PROCEDURE [过程1[,过程2…]] |
从MySQL的表格中删除一个或多个存储过程。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 mopinlan!
评论