MySQL学习——操作存储过程

摘要:本文主要学习了使用DDL语句操作存储过程的方法。

了解存储过程

是什么

存储过程是一组为了完成特定功能的SQL语句集合。

使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。

优点

1)封装性

存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,并且数据库专业人员可以随时对存储过程进行修改,而不会影响到调用它的应用程序源代码。

2)可增强SQL语句的功能和灵活性

存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

3)可减少网络流量

由于存储过程是在服务器端运行的,且执行速度快,因此当客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而可降低网络负载。

4)高性能

存储过程执行一次后,产生的二进制代码就驻留在缓冲区,在以后的调用中,只需要从缓冲区中执行二进制代码即可,从而提高了系统的效率和性能。

5)提高数据库的安全性和数据的完整性

使用存储过程可以完成所有数据库操作,并且可以通过编程的方式控制数据库信息访问的权限。

创建存储过程

语法

 create procedure 存储过程名([参数]) 存储过程体

说明

1)存储过程名

存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 数据库名.存储过程名 。需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。

2)参数

存储过程的参数列表。格式如下:

 [in|out|inout] 参数名 参数类型

MySQL存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用in、out和inout三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的SQL语句会将参数名看作列名,从而引发不可预知的结果。

当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有1个或多个参数。

3)存储过程体

存储过程的主体部分,包含在过程调用的时候必须执行的SQL语句。这个部分以关键字begin开始,以关键字end结束。若存储过程体中只有一条SQL语句,则可以省略begin和end。

delimiter命令

在MySQL中,服务器处理SQL语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条SQL语句,这些SQL语句如果仍以分号作为语句结束符,那么MySQL服务器在处理时会以遇到的第一条SQL语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的SQL语句,这样显然不行。

为解决这个问题,通常可使用delimiter命令将结束命令修改为其他字符。

当使用delimiter命令时,应该避免使用反斜杠“\”字符,因为它是MySQL的转义字符。

实例

创建不带参数的存储过程:

 mysql> delimiter //
mysql> create procedure showScore()
-> begin
-> select * from score;
-> end //
Query OK, 0 rows affected (0.00 sec) mysql>

创建带有参数的存储过程:

 mysql> delimiter //
mysql> create procedure showStuScore(in stu varchar(20))
-> begin
-> select * from score where student = stu;
-> end //
Query OK, 0 rows affected (0.00 sec) mysql>

使用存储过程

语法

 call 存储过程名称([参数]);

实例

 mysql> call showScore();
+----+---------+-----------+-------+
| id | student | course | grade |
+----+---------+-----------+-------+
| 2 | 张三 | 英语 | 53 |
| 3 | 李四 | 计算机 | 48 |
| 4 | 李四 | 中文 | 38 |
| 5 | 王五 | 中文 | 95 |
| 6 | 赵六 | 计算机 | 70 |
| 7 | 赵六 | 英语 | 92 |
| 8 | 赵六 | 中文 | 73 |
| 9 | 孙七 | 英语 | 94 |
| 10 | 周八 | 计算机 | 90 |
| 11 | 周八 | 英语 | 85 |
| 12 | 吴九 | 计算机 | 90 |
| 13 | 吴九 | 中文 | 55 |
+----+---------+-----------+-------+
12 rows in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql>

查看存储过程

查看所有存储过程

 mysql> show procedure status;
+------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| demo | showScore | PROCEDURE | root@localhost | 2019-09-09 21:03:42 | 2019-09-09 21:03:42 | DEFINER | | utf8 | utf8_general_ci | gb2312_chinese_ci |
| demo | showStuScore | PROCEDURE | root@localhost | 2019-09-09 21:06:10 | 2019-09-09 21:06:10 | DEFINER | | utf8 | utf8_general_ci | gb2312_chinese_ci |
+------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
2 rows in set (0.00 sec) mysql>

查看存储过程的创建语句

 mysql> show create procedure showScore;
+-----------+--------------------------------------------+------------------------------------------------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation |
+-----------+--------------------------------------------+------------------------------------------------------------+----------------------+----------------------+--------------------+
| showScore | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `showScore`()
begin
select * from score;
end | utf8 | utf8_general_ci | gb2312_chinese_ci |
+-----------+--------------------------------------------+------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec) mysql>

修改存储过程

可以通过先删除存储过程,然后重新创建存储过程的方法实现修改的操作。

删除存储过程

语法

 drop procedure 存储过程名称

实例

 mysql> drop procedure showScore;
Query OK, 0 rows affected (0.00 sec) mysql>

MySQL学习——操作存储过程的更多相关文章

  1. MySQL学习——操作自定义函数

    MySQL学习——操作自定义函数 摘要:本文主要学习了使用DDL语句操作自定义函数的方法. 了解自定义函数 是什么 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由SQL ...

  2. MySQL学习——操作视图

    MySQL学习——操作视图 摘要:本文主要学习了使用DDL语句操作视图的方法. 了解视图 是什么 视图是从一个.多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行. 特点 视图不是数据 ...

  3. MySQL学习——操作表里的数据

    MySQL学习——操作表里的数据 摘要:本文主要学习了使用DML语句操作表里数据的方法. 插入数据 语法 通过传入数据插入: insert into 表名 [(列名1, …, 列名n)] values ...

  4. MySQL学习——操作数据库

    MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...

  5. MySQL学习笔记——存储过程

  6. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

  7. Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别)

    学习内容:存储程序与函数...这一章学的我是云里雾里的... 1.存储过程...   Mysql存储过程是从mysql 5.0开始增加的一个新功能.存储过程的优点其实有很多,不过我觉得存储过程最重要的 ...

  8. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  9. Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

随机推荐

  1. PHP ThinkPHP 非常好用的增删改查方法

    获取列表数据(多条) /*** 获取页面列表* @param $params //查询条件 例:['id'=>['in','1,2']] ['status'=>1]* @param arr ...

  2. Difference between JDK, JRE and JVM

    With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...

  3. Oracle 事务ACID的特性

    1.事务对数据库控制操作 事务(Transaction)是用户定义的一个数据库操作序列,是不可分割的一部分的整体.这些操作要么做,要么不做(原子性).事务是对数据库对进行操作的最基本的逻辑单位,他可以 ...

  4. Java操作数据库——在JDBC里使用事务

    Java操作数据库——在JDBC里使用事务 摘要:本文主要学习了如何在JDBC里使用事务. 使用Connection的事务控制方法 当JDBC程序向数据库获得一个Connection对象时,默认情况下 ...

  5. Display a Detail View with a List View 主子视图-列表视图与详细信息视图同时显示

    In this lesson, you will learn how to display a Detail View together with a List View. For this purp ...

  6. 剑指offer笔记面试题14----剪绳子

    题目:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n > 1 并且m > 1),每段绳子的长度记为k[0], k[1], ...k[m].请问k[0] x k[1] x .. ...

  7. Nginx一般配置

    文件为 nginx.conf ,一般配置内容如下: user root;worker_processes auto;#pid /var/run/nginx.pid;#error_log /dev/st ...

  8. Android项目模块化/组件化开发(非原创)

    文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...

  9. SQL语句添加表外键

    ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(外键列) REFERENCES 外键表(外键表主键)

  10. Linux uevent分析、用户接收uevent以及mdev分析

    关键词:uevent.netlink.ADD/REMOVE/CHANGE.uevent_helper.hotplug.usermode helper.mdev.mdev.conf等等. 本文从三方面了 ...