1.自定义函数,函数可以返回任意类型的值,同样可接说这些类型的参数。

CREATE FUNCTION function_name
RETURNS
{STRING|INTER|REAL|DECIMAL}
routine_body

函数体由合法的SQL语句构成。

函数体可以是简单的SELECT或INSERT语句。

函数体如果为复合结构使用BEGIN_END语句。

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

2.创建函数

如果开启了bin-log, 我们就必须为我们的function指定一个参数。

我们先不指定参数,解决办法

set global log_bin_trust_function_creators=TRUE;

创建一个不带参的简单函数

CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN NOW();

现在运行,可得到现在时间

SELECT f1()

删除函数

DROP FUNCTION f1;

创建带有参数的自定义函数

CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)RETURNS FLOAT(10,2) UNSIGNEDRETURN (num1+num2)/2;

复合结构函数体的自定义函数

CREATE FUNCTION f3(name VARCHAR(20)) RETURNS INT UNSIGNED BEGIN INSERT Persons VALUES('A','B','C',name); RETURN LAST_INSERT_ID(); END$$

3.存储过程,SQL语句和控制语句的预编译集合。

增强SQL语句的功能和灵活,实现较快的执行速度,减少网络流量。

创建一个简单的不带参数存储过程

CREATE PROCEDURE sp1() SELECT VERSION();

调用我们创建的存储过程

CALL sp1()

有参数的存储过程

CREATE PROCEDURE sp2(IN uid INT UNSIGNED)
BEGIN
DELETE FROM tdb_goods WHERE id=uid;
END

IN表示输入参数,向存储过程传递一个参数。必须在调用存储过程时指定。存储过程中修改该参数得值不能被返回。

CREATE PROCEDURE removeAndUser(IN p_id INT UNSIGNED,OUT userId INT UNSIGNED)
BEGIN
DELETE FROM tdb_goods WHERE id=p_id;
SELECT COUNT(goods_id) FROM tdb_goods INTO userId;
END

OUT该值可以在存储过程内被改变,并可返回

调用removeAndUser

CALL removeAndUser(50,@unms);

@nums是全局变量,跟DECLARE不同,DECLARE是在BEGIN和END之间有效,为局部变量。

删除存储过程

DROP PROCEDURE removeAndUser;

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

存储过程实现的功能复杂一些,而函数针对性更强。

存储过程可以返回多个值,函数只能有一个返回值。

存储过程一般独立执行,而函数可以作为其他SQL语句的组成部分来实现。

持续更新。。。

mysql的学习笔记(七)的更多相关文章

  1. MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)

    知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...

  2. MYSQL初级学习笔记七:MySQL中使用正则表达式!(视频序号:初级_44)

    知识点九:MySQL中使用正则表达式(44) (1):REGEXP‘匹配方式’: (2):常用匹配方式: 模式字符 ^ 匹配字符开始的部分 $ 匹配字符串结尾的部分 . 代表字符串中的任意一个字符,包 ...

  3. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  7. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  9. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. HTML5 CSS3 精美案例 : 实现VCD包装盒个性幻灯片

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31015121 哈,首先感谢下w3cfuns的老师,嗯~ 好了,这次给发夹分享一个 ...

  2. easyui下载包详解

    easyui包详解: 文件夹: demo--该目录下存放的是 EasyUI PC 版各插件的示例示例.如果不想在官网上查看演示,可以在该目录下找到相应的演示示例 demo-mobile--该目录下存放 ...

  3. Python eval 函数妙用

    eval 功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source, globals, locals) -> value 参数: source:一个Python ...

  4. nsqlookup_protocol_v1.go

    , atomic.LoadInt64(&client.peerInfo.lastUpdate))         now := time.Now()         p.ctx.nsqlook ...

  5. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

  6. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  7. BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图

    BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大. ...

  8. BZOJ_1257_ [CQOI2007]余数之和sum_数学

    BZOJ_1257_ [CQOI2007]余数之和sum_数学 题意:给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 分 ...

  9. 解决jenkins slave 中文乱码 encoding=ANSI_X3.4-1968

    jenkins配置slave进行构建时,发现slave构建的控制台输入中文乱码,查看master,slave的jenkins系统信息 file.encoding和sun.jnu.encoding都没有 ...

  10. ArcGIS API for JavaScript 入门教程[0] 目录

    随时翻看. 转载注明出处,博客园/CSDN/B站:秋意正寒. Part 1 必看 ArcGIS API for JavaScript 入门教程[1] 渊源 你还真不一定知道这是啥.非得学吗? ArcG ...