数据库编程

一,存储过程

存储过程:是一组为了完成某项特定功能的SQL语句集,其实质上就是一段存储在数据库中的代码

由声明式SQL语句(如create,update,和select等)和过程式语句(如 if...then...else 控制结构语句)组成

存储过程具有以下好处

1).可增强SQL语言的功能和灵活性

2).良好的封装性

3).高性能:存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,以后的操作中,只需从高速缓冲器中调用已编译好的代码

4).可减少网络流量:由于存储过程是在服务端运行,且执行速度快,当客户计算机上调用该存储过程时,网络中传输的只是该调用语句,从而降低网络负载。

5).存储过程可作为一种安全机制来确保数据库的安全性和数据的完整性

二,创建存储过程

在MySQL中服务器处理SQL语句默认是以分号作为语句结束标志,然后在创建存储过程时,存储过程体中可能包含有多条SQL语句,这些SQL语句

如果任以分号作为语句结束符,那么服务器在处理第一条 SQL时遇到分号就不在处理后面的语句。为解决这个问题通常可使用 delimiter 命令将MySQL语句的结束标志临时修改为其他符号,

在最后通过 delimiter 命令 再将MySQL语句的结束标志改回 分号(;)

格式:

delimiter  $$

其中 $$  是自定义的结束符,应该避免使用 反斜杠(\)字符,因为他是MySQL的转义字符

如果希望换回默认的分号 (;)作为结束标志,可以输入

delimiter ;

创建存储过程语句

 

create procedure 存储过程名称 ([in|out|inout] 参数名 参数类型)

存储过程主体

 

in:表示输入参数,输入参数是使数据可以传递给一个存储过程

out:输出参数,输出参数用于存储过程需要返回一个操作结果的情形

inout:输入/输出参数既可以充当输入参数,也可以充当输出参数

存储过程主体:包含了SQL语句。以关键字 “begin”开始,以关键字  “end” 结束。如果只有一条语句时可以省略 “begin...end”

 

 三,存储过程体

1.局部变量

存储过程体中可以声明局部变量,用来存储 存储过程体中的临时结果。

使用 declare语句来声明局部变量同时还可以赋予变量一个初始值

语法格式

declare 局部变量名称[...] type [default value]

 

type:声明局部变量的数据类型

default:为局部变量指定默认值,若没有则默认为 null

例子

declare cid int(10)

注意

局部变量只能在存储过程体的 begin ...end 语句块中声明

必须在开头处声明

作用范围仅限于 begin ...end 语句块

 

2.set语句

可以使用 set 语句为局部变量赋值、

语法格式

set 变量名=值

 

例子

set cid=910

3.select ... into 语句

可以使用 select ... into 语句把选定列的值 直接存储到局部变量中

语法格式

select 指定列名  [,...] into 要赋值的变量名 [......]table_expr

table_expr:表示 select语句中的 from 子句及后面的语法部分

4.流程控制语句

 (1)条件判断语句

常用的条件判断语句有 if...then...else语句和 case语句使用语法及方式类似于高级程序语言

(2)循环语句

常用的循环语句有 while 语句,repeat语句和 loop 语句使用语法及方式类似于高级程序语言,此外还可以使用 iferatre语句 

但她只能出现在 loop,repeat,while 子句中用于表示退出当前循环,且重新开始一个循环

5.游标

游标是一个被 select  语句检索出来的结果集。在存储了游标后,应用程序或用户就可以根据需要滚动或浏览其中的数据

(1)声明游标

在能够使用游标之前,必须声明它。这个过程实际上没有检索数据,只是定义要使用的 select 语句。

语法格式

declare 游标名 cursor 查询语句

查询语句:用于指定一个 select 语句,其会返回一行或者多行的数据,且需要注意此处的 select 语句不能有 into 子句。

(2)打开游标

定义游标之后,必须打开游标,才能使用。这个过程实际上是将游标连接由 select 语句返回的结果集中。

语法格式

open 游标名

(3)读取数据

对于填有数据的游标,可根据需要取出数据

语法格式

fetch 已打开的游标 into 变量名

变量名:用于指定存放数据的变量名

fetch 语句是将游标指向的一行数据赋给一些变量,这些变量的数目必须等于声明游标时 select 子句中选择列的数目。游标相当于一个指针,它指向当前的一行数据

(4)关闭游标

在结束游标使用时,必须关闭游标。

语法格式

close 要关闭的游标

注意:声明过的游标,则不需要再次声明,直接使用 open 语句打开,若没有明确关闭游标,MySQL会到达end语句时自动关闭它

 

 

 游标需要注意的几点

游标只能用于存储过程或存储函数中

在存储过程或存储函数中可以定义多个游标,但是在一个 begin...end 语句块中每一个游标的名字必须是唯一的

游标不是一条 select 语句,是被 select 语句检索出来的结果集

四,调用存储过程

创建好存储过程后,可以使用 call 语句在程序或者其他存储过程中 调用他,

语法格式

call 存储过程名称 (参数,....)

call 存储过程名称

五,删除存储过程

drop procedure [if exists] 存储过程名称

 六,存储函数

存储函数和存储过程的区别

存储函数不能拥有输出参数,这是因为存储函数本身就是输出参数;

可以直接对存储函数进行调用,且不需要使用 call 语句

存储函数中必须包含一条 return 语句

(1)创建存储函数

语法格式

create function 函数名([参数名称,参数类型])

returns type

存储函数主体

 

returns:声明存储函数返回值的数据类型,其中 type 用于指定返回值的数据类型

存储函数主体:在存储过程中使用的SQL语句在存储函数中同样适用,但是在存储函数体中还必须包含 return value 语句,其中value用于指定存储函数的返回值

 

 (2)调用存储函数、

语法格式

select 存储函数

 (3)删除存储函数

语法格式

drop function [ if exists]函数名

posted @ 2019-01-28 11:41  越长大越孤单哦  阅读(602)  评论(0编辑  收藏  举报