mysql的学习笔记(七)
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的学习笔记(七)的更多相关文章
- MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)
知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...
- MYSQL初级学习笔记七:MySQL中使用正则表达式!(视频序号:初级_44)
知识点九:MySQL中使用正则表达式(44) (1):REGEXP‘匹配方式’: (2):常用匹配方式: 模式字符 ^ 匹配字符开始的部分 $ 匹配字符串结尾的部分 . 代表字符串中的任意一个字符,包 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- Java系列1 -- 浅谈面向对象
也许每一个计算机专业的人,在大学学习java的时候,老师开始时都会说这么一句话,"Java是一门面向对象的语言".那么面向对象到底是什么,他有什么好处,或者他比其他流行的语言C/C ...
- 4. 整合MyBatis
mybatis既有jdbc的灵活,有具有orm工具的方便,是一套很好用的工具,这儿就使用mybatis来作为数据访问工具,具体添加过程如下: 1. 添加mybatis依赖,并更新项目 <depe ...
- Python 枚举
1. 枚举的定义 首先,定义枚举要导入enum模块.枚举定义用class关键字,继承Enum类.用于定义枚举的class和定义类的class是有区别. 示例代码: from enum import E ...
- Python replace()方法
描述 Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次. 语法 replace()方法语法: st ...
- JDBC连接MySQL数据库基础
主要内容 MySQL的基本操作和基本SQL语法 使用JDBC进行MySQL数据库的开发 使用DriverManager.Connection.PreparedStatement.ResultSet对数 ...
- MySQL如何优化
对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的兴起,到Ma ...
- http.go
) } if name != cfgName { continue } return val.FieldByNa ...
- 一种非常巧妙的读取串口数据的方法--C#
读取不完就一直等待,读完了就立刻走,之前都是设置一个溢出时间,不管是不是早就读取完了都要在这等着,有一定的时间浪费. 注意,用之前要设置好SerialPort类的TimeOut属性:
- Django 基础二(View和urls)
上一篇博文已经成功安装了python环境和Django,并且新建了一个空的项目.接下来就可以正式开始进行Django下 的Web开发了.首先进入项目的主目录: cd ./DjangoLearn/hol ...
- 深入学习Redis(3):主从复制
前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...