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. tp框架的MVC模式

    一.定义 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方 ...

  2. 初探云服务器ECS(Linux系统)

    PS: 购买的阿里云服务器(ECS,Linux系统),使用的弹性公网IP(EIP). 一.使用Xshell链接ECS 1.将公网IP填入主机即可 2.用户名一般为root,密码是自己设置的,填入即可. ...

  3. (Matlab)GPU计算及CPU计算能力的比较

    %%首先以200*200的矩阵做加减乘除 做比较 t = zeros(1,100); A = rand(200,200);B = rand(200,200);C = rand(200,200); fo ...

  4. 爬虫(scrapy中的ImagesPipeline)

    在使用ImagesPipeline对妹子图网站图片进行下载时,遇到302错误,页面被强制跳转. 解决办法如下: # -*- coding: utf-8 -*- # Define your item p ...

  5. android中activity.this跟getApplicationContext的区别

    转载: http://www.myexception.cn/android/1968332.html android中activity.this和getApplicationContext的区别 在a ...

  6. GitHub趋势:Vue.js大有超过TensorFlow之势!

    2月,Github上第二受欢迎的项目是Flutter.Flutter的第一个测试版本是作为2018年世界移动通信大会的一部分而开始的. Flutter是一款移动UI框架,旨在帮助开发人员在iOS和An ...

  7. 一周Maven框架学习随笔

    第一次写博客,可能写得不是很好,但是希望自己持之以恒,以后会更好.也希望通过写博客记录随笔,让自己本身有所收获. 下面是今天的maven总结: maven个人理解中是Maven项目对象模型(POM), ...

  8. JavaScript(第二十二天)【动态加载js和css】

    学习要点: 1.元素位置 2.动态脚本 3.动态样式 本章主要讲解上一章剩余的获取位置的DOM方法.动态加载脚本和样式.   一.元素位置 上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充 ...

  9. Beta 第一天

    一.今日任务 重新熟悉整体项目 对整个项目在未来的beta冲刺中进程有一个合理的规划 由于我们送出的是一个负责前端的成员,引入的也是一个负责前端工作的女生,(女生做起美工比起男生更加得心应手吧)所以我 ...

  10. 总结随笔(Beta)

    听说 -- beta冲刺总结 beta冲刺成员名单 姓名 学号 负责方向 个人主页 周龙荣 031402543 前端页面.跳转 http://www.cnblogs.com/ZHOULR/ 李家鹏 0 ...