首页 / MYSQL / MySQL-存储过程
MySQL-存储过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL-存储过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3991字,纯文字阅读大概需要6分钟。
内容图文
![MySQL-存储过程](/upload/InfoBanner/zyjiaocheng/501/f03e20fe11044c5586890938ca09ec71.jpg)
1、存储过程:
存储过程保存在mysql.proc表中
2、创建存储过程:
CREATE PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]])
routime_body
其中:proc_parameter : [IN|OUT|INOUT] parameter_name type
其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型
3、查看存储过程列表:
SHOW PROCEDURE STATUS
4、查看存储过程定义
SHOW CREATE PROCEDURE sp_name
5、调用存储过程
CALL sp_name ([ proc_parameter [,proc_parameter ...]])
CALL sp_name
说明:当无参时,可以省略"()",当有参数时,不可省略"()"
6、存储过程修改
ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改存储过程体,所以要修改存储过程,方法就是删除重建
7、删除存储过程
DROP PROCEDURE [IF EXISTS] sp_name
8、存储过程优势
存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要时从数据库中直接调用,省去了编译的过程
提高了运行速度
同时降低网络数据传输量
存储过程相当于独立命令可以直接调用
9、存储过程与自定义函数的区别
存储过程实现的过程要复杂一些,而函数的针对性较强
存储过程可以有多个返回值,而自定义函数只有一个返回值
存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用
存储过程示例:
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> CREATE PROCEDURE showTime()
-> BEGIN
-> SELECT now();
-> END//
delimiter ;
Query OK, 0 rows affected (0.02 sec)
MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> CALL showTime;
+---------------------+
| now() |
+---------------------+
| 2018-10-09 19:38:46 |
+---------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
查看存储过程:
MariaDB [hellodb]> show procedure status\G
*************************** 1. row ***************************
Db: hellodb
Name: showTime
Type: PROCEDURE
Definer: root@localhost
Modified: 2018-10-09 19:38:45
Created: 2018-10-09 19:38:45
Security_type: DEFINER
Comment:
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 rows in set (0.00 sec)
跨数据库是否能执行:
1、MariaDB [hellodb]> use db1
2、MariaDB [db1]> CALL showTime;
ERROR 1305 (42000): PROCEDURE db1.showTime does not exist
3、MariaDB [db1]> call hellodb.showTime;
+---------------------+
| now() |
+---------------------+
| 2018-10-09 19:43:15 |
+---------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
创建含参存储过程:只有一个IN参数
MariaDB [db1]> delimiter ;
MariaDB [db1]> call selectById(2);
ERROR 1054 (42S22): Unknown column ‘stuid‘ in ‘where clause‘
MariaDB [db1]> call selectById(3);
ERROR 1054 (42S22): Unknown column ‘stuid‘ in ‘where clause‘
MariaDB [db1]> use hellodb
Database changed
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> CREATE PROCEDURE selectById(IN uid SMALLINT UNSIGNED)
-> BEGIN
-> SELECT * FROM students WHERE stuid = uid;
-> END//
Query OK, 0 rows affected (0.00 sec)
MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> call selectById(2);
+-------+------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+------------+-----+--------+---------+-----------+
| 2 | Shi Potian | 22 | M | 1 | 7 |
+-------+------------+-----+--------+---------+-----------+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
计算的存储过程示例:
# @i 变量
# repeat 重复
# @i = @i + 1 相当于shell脚本里面的i++
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> CREATE PROCEDURE dorepeat(n INT)
-> BEGIN
-> SET @i = 0;
-> SET @sum = 0;
-> REPEAT SET @sum = @sum+@i; SET @i = @i + 1;
-> UNTIL @i > n END REPEAT;
-> END//
delimiter ;
Query OK, 0 rows affected (0.02 sec)
MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> CALL dorepeat(100);
Query OK, 0 rows affected (0.00 sec)
MariaDB [hellodb]> SELECT @sum;
+------+
| @sum |
+------+
| 5050 |
+------+
1 row in set (0.00 sec)
MySQL-存储过程
标签:security 业务逻辑 sum maria ++ sts 函数 localhost type
本文系统来源:http://blog.51cto.com/dklwj/2298010
内容总结
以上是互联网集市为您收集整理的MySQL-存储过程全部内容,希望文章能够帮你解决MySQL-存储过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。