《关系数据库设计理论之自定义函数(数据库设计)》

关系数据库设计理论之自定义函数(数据库设计)

自定义函数

         用户自定义函数(user-defined-function,UDf)是一种MySQL的扩展途径,其用法与内置函数相同

自定义函数的两个必要条件(参数和返回值之间没有必然联系)

(1)      参数

(2)      返回值(在MySQL的函数中,所有的函数都要有返回值)

函数可以返回任意类型的值,同样可以接收这些类型的参数

创建自定义函数

CREATE FUNCTION function_name

RETURNS(这个指的是返回值的类型)

{STRING|INTEGER|REAL|DECIMAL}

Routine_body(函数体)

 

关于函数体

(1)      函数体由合法的SQL语句构成

(2)      函数体可以是简单的SELECT或INSERT语句

(3)      函数体如果为复合结构(也就是有多条语句)则使用BEGIN….END语句

(4)      复合结构可以包含声明、循环、控制结构

创建一个带有两个参数的自定义函数

通过函数来实现向一个表中添加一条记录


DELIMITER //    意思是将//设置为结束标志

当函数体包含多条语句时,需要放在BEGIN和AND之间

删除函数 DROPFUNCTION[IF NOT EXISTS] function_name;

 

数据库中的存储过程

 

MySQL命令的执行流程

 

SQL命令-----MySQL引擎-----语法正确------可识别命令------执行结果------客户端

 

成功输入SQL语句以后,MySQL引擎会对输入的SQL命令进行分析,查看是否正确,如果正确再进行编译,编译成MySQL引擎可以识别的命令,之后开始执行,并且将执行的结果返回给客户端

 

存储过程

         存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理

存储过程的优点

(1)    增强SQL语句的功能和灵活性(2)实现较快的执行速度(3)减少网络流量

创建存储过程

         CREATE

         [DEFINER={user|CURRENT_USER}]

         PROCEDUREsp_name([proc_parameter[,…]])

         [characteristic…]routine_body

         pro_parameter:

         [IN|OUT|INOUT]param_name type;

IN:表示该参数的值必须在调用存储过程时指定

OUT:表示该参数的值可以被存储过程改变,并且可以返回

INOUT:表示该参数在调用时指定,并且可以被改变和返回

过程体:

         过程体由合法的SQL语句构成;

         过程体可以是增、删、改、查、多表连接等SQL语句;

过程体如果为复合结构则使用BEGIN….END语句

复合结构可以包含声明、循环、控制结构

 

存储过程的调用 CALL sp_name([parameter[,…]]);

                                     CALLso_name[()]   也就是说没有参数时,这里的()可以要也可以不要

创建一个没有参数的存储过程

创建一个包含IN类型的参数的存储过程(注意:这个参数的名字,不能和数据表中的记录名相同)

删除存储过程   DROP        PROCEDURE [IF EXISTS] sp_name;

 

从数据表中删除id不固定的记录,并且返回剩余的记录数(第二个参数是要用来返回的,所以要定义成OUT型)

那里的INTO表示要将COUNT(id)的结果放入到userNums中

传一个变量来接收OUT类型的返回值

@nums这种写法代表的就是变量  像这种前边有一个@符号的变量称之为用户变量 它是和MySQL的客户端绑定的   只对当前的客户端生效 

在BEGIN….AND之间的变量称之为局部变量

 

存储过程与自定义函数的区别

(1)      存储过程实现的功能要复杂一些;而函数的针对性更强

(2)      存储过程可以返回多个值;函数只能由一个返回值

(3)      存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分来出现

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值