mysql存储过程的基本概念和创建

  • 存储过程:SQL中的“脚本”

    1.创建存储过程

    2.调用存储过程

    3.存储过程体

    4.语句块标签

  • 存储过程的参数

    1.in:向过程里传参

    2.out:过程向外传参值

    3.inout:既实现in又实现out   in and out

 

SQL语句:先编译后执行

存储过程:

        一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

优点:

  1. 存储过程是预编译的,而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些
  2. 将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
  3. 统一了接口,确保数据的安全

存储过程的创建和调用:

  1. 存储过程就是一段具有名字的代码,用来完成某个特定的操作
  2. 创建的存储过程保存在数据库的数据字典中
  3. 创建存储过程使用procedure关键字

创建表tb_stu并在表中插入如下数据:

+------+------+------+------------+
| id   | name | sex  | birthday   |
+------+------+------+------------+
|    2 | 小红 | 女   | 2008-07-06 |
|    1 | 小明 | NULL | NULL       |
|    3 | 小明 | 男   | 2011-07-10 |
|    4 | 张三 | 男   | 2005-06-22 |
|    4 | 小黄 | 女   | 2007-04-22 |
|    4 | 李四 | 男   | 2001-06-29 |
+------+------+------+------------+

示例:创建存储过程删除sex列为"男"的记录

mysql> delimiter $$    #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure delete_tb_stu(in p_sex varchar(255))
    -> begin
    -> delete from tb_stu
    -> where sex = p_sex;
    -> end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;    #将语句的结束符号恢复为分号

解析:我们创建了一个叫delete_tb_stu的存储过程,内容被包括在begin...end语句块内,我们在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释(内容中的分号必须要)。

调用存储过程(call sp_name[(传参)];):

mysql> select * from tb_stu;
+------+------+------+------------+
| id   | name | sex  | birthday   |
+------+------+------+------------+
|    2 | 小红 | 女   | 2008-07-06 |
|    1 | 小明 | NULL | NULL       |
|    3 | 小明 | 男   | 2011-07-10 |
|    4 | 张三 | 男   | 2005-06-22 |
|    4 | 小黄 | 女   | 2007-04-22 |
|    4 | 李四 | 男   | 2001-06-29 |
+------+------+------+------------+
6 rows in set (0.00 sec)

mysql> call delete_tb_stu("男");
Query OK, 3 rows affected (0.00 sec)

mysql> select * from tb_stu;
+------+------+------+------------+
| id   | name | sex  | birthday   |
+------+------+------+------------+
|    2 | 小红 | 女   | 2008-07-06 |
|    1 | 小明 | NULL | NULL       |
|    4 | 小黄 | 女   | 2007-04-22 |
+------+------+------+------------+
3 rows in set (0.00 sec)

存储内容体:

>存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等

>过程体格式:以begin开始,以end结束(可嵌套)

begin
  begin
    begin
      statements; 
    end
  end
end

存储过程的参数:

存储过程可以有0个或多个参数,用于存储过程的定义。

3种参数类型:

  1. in输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  2. out输出参数:表示过程向调用者传出值(可以返回多个值,传出值只能是变量)
  3. inout输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

注意:即使过程没有参数,也必须在过程名后面加上小括号

删除存储过程:

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

 

你可能感兴趣的:(java,MySQL)