mysql中的函数:

1 mysql下创建函数:
1.1 语法:
delimiter $$ -- 设置分隔符,默认是; 设置成其他符号,让编译器知道我们函数编写的结束,此处设置成$$
create function 函数名(参数列表) returns 返回值类型
begin 函数语句 end
$$ -- 表示结束
delimiter ; -- 结束符修改成默认 例如:编写一个返回a+b的函数
delimiter $$
create function get_sum(a int , b int ) returns int
begin
declare res int default 0;
set res = a + b;
return res;
end
$$ delimiter ; -- 函数中不支持sql语句,唯一可用放入函数的sql就是 select... into 变量。在函数当中把查询结果赋值给变量。 1.2 函数语句:
1.2.1 定义一个变量: declare 变量名 类型 default 默认值
例如: declare x varchar(100);
1.2.2 修改变量值: set 变量名 = 值
例如: set x = "abc"; 1.2.3 判断语法:
if 条件1 then
语句1;
elif 条件2 then
语句2;
else
语句;
end if 1.2.4 循环语法:
while 条件 do
语句;
end while;
-- leave 可以退出循环 相当于break
-- iterate 结束本次循环开始下一次循环 相当于continue 1.2.5 实例:一个输出1到1000之间偶数的函数odd
delimiter $$ -- 设置结束标识符
create function odd() returns varchar(300)
begin
declare i int default 2;
declare res varchar(300) default "";
while i <= 100 do
set res = concat(res ," ", i);
-- 拼接字符串
set i = i + 2;
end while;
return res;
end;
$$ delimiter ; 1.3 用户变量/会话变量:
只有当前连接用户有效,其他连接用户我发访问。 -- 使用@表示声明用户变量。 set @变量名 = 值
set @ age = 20; -- 查看当前用户变量。 select @变量名;
select @age; -- 为用户变量赋值。
select @age := max(age) from students; 1.4 系统变量:
任何用户都可以访问。
使用@@来标识系统变量。
使用select来查看系统变量 -- 查看所有的系统变量
show variables; -- 查看系统变量: select @@变量名;
select @@max_connections; -- 当前用户/会话中修改系统变量: set 变量名 = 值;
set max_connections = 1000; 2 查看函数:
所有函数(和存储过程)存储在mysql数据库下的proc表中
查看python数据库中的函数:
select db , name , type from mysql.proc where db="python" 3 调用函数:
select 函数名(传入参数); 比如 select get_sum(4,6); 4 删除函数:
drop function 函数名称;
例如:
drop function get_sum; mysql中的存储过程:
存储过程是多条sql语句的集合,是一种批处理过程。 1 存储过程的创建:
1.1 语法:
delimiter // -- 更换终止分隔符
create procedure 存储过程名称(参数列表)
begin
sql语句;
end
// delimiter ; -- 改回分隔符关键字 -- sql语句结尾的;会让创建存储过程语句结束
-- 所以我们自己更改一个终止分隔符, 也可以指定其他符号。 实例:查询学生信息的存储过程
delimiter //
create procedure pro_stu()
begin
select * from students;
end
// delimiter ; 1.2 参数与返回值:存储过程没有返回值,如果需要向外传递数据,可以设置参数。
参数有三种类型:
in 向存储过程内部传递数据 默认就是in类型
out 存储过程向外传递数据 可以代替返回值的功能
inout 可以双向传递数据 例如: 查询指定id的学生信息 并且在外部想要获取学生总人数
delimiter //
create procedure get_stu( in id int , out num int )
begin
select * from students where students.id = id;
select count(*) from students into num; end
// delimiter ; 之后调用的借助一个用户变量:
call get_stu(1,@num);
之后总人数赋值给了@num 用户变量:
select @num; 2 查看存储过程:
所有存储过程和函数都放在mysql数据库下的proc表中
desc mysql.proc\G 主要字段:
name 名称
type 类型 存储过程或者函数
body 正文内容
db 属于那个数据库 查看python数据库的所有存储过程
select db , name , type , body from mysql.proc where db = "python" ; 3 调用存储过程: call 存储过程名(参数列表);
例如:
call proc_stu() ; 4 删除存储过程: drop procedure 存储过程名称;
例如:
drop procedure proc_stu; 存储过程和函数的区别 相同点
存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.
存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的 sql, 不需要重复编译
减少网络交互,减少网络访问流量 不同点
标识符不同,函数的标识符是 function, 过程:procedure
函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值
函数使用 select 调用,存储过程需要使用 call 调用
select 语句可以在存储过中调用,但是除了 select ... into 之外的 select 语句都不能再函数中调用
通过 in out 参数,过程相关函数更加灵活,可以返回多个结果
在实际开发中根据个人喜好选择使用函数或者存储过程

mysql中的函数与存储过程的更多相关文章

  1. Mysql中的函数

    什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...

  2. mysql创建自定义函数与存储过程

    mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...

  3. thinkphp中的内置操作数据库与mysql中的函数汇总

    8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...

  4. mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑

    mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...

  5. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  6. MySQL中concat函数

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  7. mysql中INSTR函数的用法

    mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTo ...

  8. MySQL中group_concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  9. MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

随机推荐

  1. SyntaxHighlighter去掉右上角帮助图标的正确方法

    先贴出问题图片: 关于这个问题.网上有很多的帖子,说了三种方法,经过测试,发现其中有些方法是有问题的,有的方法虽然能过解决问题,但是却会带来其他的错误.现在说明如下: 网上的原话: syntaxhig ...

  2. zabbix添加自定义监控项

    zabbix添加自定义监控项 author:headsen  chen   2017-10-16  17:23:17 个人原创,转载请注明作者,出处,否则依法追究法律责任 主机端配置: 首先安装好za ...

  3. go语言的数组和切片区别

    这里不介绍数组和切片的使用技巧,主要看下2者的区别. 首先看下它们的定义: 数组:类型 [n]T 表示拥有 n 个 T 类型的值的数组. 切片:类型 []T 表示一个元素类型为 T 的切片. 看一个数 ...

  4. weka实际操作--构建分类、回归模型

    weka提供了几种处理数据的方式,其中分类和回归是平时用到最多的,也是非常容易理解的,分类就是在已有的数据基础上学习出一个分类函数或者构造出一个分类模型.这个函数或模型能够把数据集中地映射到某个给定的 ...

  5. linux性能调试之iostat

    iostat用来监控调试linux系统的IO性能. 一般用法: iostat -xdct time_interval count [disk] -x:显示扩展统计项,如果不使用-x参数只会打印基本统计 ...

  6. Android proguard (混淆)

    混淆(Proguard)用法 最近项目中遇到一些混淆相关的问题,由于之前对proguard了解不多,所以每次都是面向Stackoverflow的编程.copy别人的答案内心还可以接受,但是copy了之 ...

  7. JDBC(通俗易懂)简单的操作(增、删、改、查)

    项目所写的类: 说明:①.DButil 动态加载数据库驱动,以及获取java.sql.Connection的对象. ②.Personmodel 数据库列(栏位)所对应的字段,定义了相应的set和get ...

  8. Konckout开发实例:简单的表单提交页面

    <!doctype html> <html > <head> <meta http-equiv="Content-Type" conten ...

  9. bjtu 1819 二哥求和(前缀和)

    题目 . 二哥的求和 时间限制 ms 内存限制 MB 题目描述 某一天,calfcamel问二哥,有道数学题怎么做呀?二哥看了一下说我不会呀,于是二哥找到了你,请你帮他解决这个问题,这样二哥就可以鄙视 ...

  10. 第2次作业:软件分析之Steam

    1. 作业内容 1.1 介绍产品相关信息 你选择的产品是? 我选择的分析的软件为STEAM 为什么选择该产品作为分析? 在上述列表中的产品,除了王者荣耀,其他几项都是平时我使用较为频繁的软件,所以最初 ...