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. 解决新电脑的系统安装问题:针对BIOS的UEFI模式

    安装win7或win8系统时UEFI和Legacy模式的设置     新的的笔记本或台式机主板都开始支持UEFI模式,不过这种模式让很多打算给电脑换win7或win8的用户头疼不已,尤其是笔记本用户. ...

  2. wpf动态增加删除控件

    我在xaml中定义了一个名字为morepictureWrapPan为WrapPanel,然后将控件添加在此WrapPanel中.由于要实现控件的删除功能,所以增加的textbox和button的名字都 ...

  3. Y2K问题

    关于第五章 团队和流程 2.6 特工团队中所提到的Y2K问题,第一次接触到这个名词去百度了,它的意思是这样的:year 2K problem,又称千年虫问题.主要原因是早期的软件大多以两位数字来记录年 ...

  4. 快速搭建CentOS+ASP.NET Core环境支持WebSocket

    环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...

  5. 51ak带你看MYSQL5.7源码1:main入口函数

    从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...

  6. 网络通信 --> 同步、异步、阻塞与非阻塞介绍

    同步.异步.阻塞与非阻塞介绍 聊聊同步.异步.阻塞与非阻塞

  7. c++ --> extern "C" {}详解

    extern "C" {}详解 extern "C"的真实目的是实现类C和C++的混合编程.在C++源文件中的语句前面加上extern "C" ...

  8. MySQL的入门

    SHOW VARIABLES LIKE 'storage_engine%' #查看引擎 ALTER TABLE `studten` RENAME `student1` #修改表名 ALTER TABL ...

  9. css3图片模糊过滤特效

    体验效果:点击这里查看效果 代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  10. Java基础学习(二)

    软件设计原则: 为了提高软件的开发效率,降低软件开发成本,一个优良的软件系统应该具有以下特点: 1,可重用性:遵循DRY原则,减少软件中的重复代码. 2,可拓展性:当软件需要升级增加新的功能,能够在现 ...