linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细

MySQL高级语句 | 进阶(三)

  • 函数
      • 日期函数
  • 存储过程
      • 概述
      • 介绍
      • 优点
      • 创建存储过程

函数

日期函数

curdate ()    返回当前时间的年月日
curtime ()    返回当前时间的时分秒
now()         返回当前时间的日期和时间
month (x)   返回日期x 中的月份
week (x)    返回日期x 是年度第几个星期
hour (curtime())     返回小时值
minute (curtime())  返回分钟值
second (curtime())  返回秒钟值
dayofweck ('2021-4-20) 返回是星期几
dayofmonth (x)  计算日期x是本月的第几天
dayolyear (x)     计算日期x是本年的第几天

linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第1张图片

linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第2张图片
linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第3张图片
linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第4张图片

linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第5张图片

存储过程

概述

前面学习的MysQL相关知识都是针对一个表或几个表的单条SQL语句,使用这样的SQL语句显然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条SQL语句一起去处理才能够完成,这时候就可以使用存储过程,轻松高效的去完成这个需求,有点类似shel脚本里的函数。

介绍

MySQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统SQT语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。存储过程在数据库中创建并保存,它不仅仅是SQL语句的集合,还可以加入些特殊的控制结构,也可以控制数据的访问方式。

优点

存储过程的优点:
1.执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
2.SOL语句加上控制语句的集合,灵活性高
3.在服务器端存储,客户端调用时,降低网络负载
4.可多次重复被调用,可随时修改,不影响客户端调用
5.可完成所有的数据库操作,也可控制数据库的信息访问权限

创建存储过程

使用 create procedure 语句创建存储过程

语法:
create  procedure <过程名>[ 过程参数...]<过程体>
[过程参数...]格式
<过程名>:尽量避免与内置的函数或字段重名
k过程体>:语句
[IN I OUT I INOUT]<参数名><类型>

示例:

mysql> delimiter $$                                             #定义结束符
mysql> create procedure ee()                                 #创建存储过程(过程名)
mysql>  begin                                                    #开启存储过程
mysql>  create table fuck (id int(10),name varchar(10),age (10));   #创建数据表
mysql>  insert into fuck values (1,'lisi',25);                     #添加数据记录
mysql>  select * from fuck;                                       #查询数据表内容
mysql>  end$$                                                      #结束存储过程

mysql>  delimiter ;                                            #结束

linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第6张图片
linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第7张图片

delimiter;
call XXX                          #调用存储过程      
参数分为:
存储过程的主体部分,被称为过程体
以begin 开始,以end 结束,若只有一条SQL语句,则可以省略begin-end
以belimiter 开始和结束

mysql> delimiter $$  用户自定义的结束符
mysql> delimiter ; 分号前有空格

#带参数的存储过程
输入参数: IN 表示调用者像过程传入值(传入值可以是字面量或变量)
输出参数: OUT表示过程向调用者传出值(可以返回多个值) (传出值只能是变量)
输入/输出参数: INOUT
即表示调用者向过程传入值,又表示过程向调用者传出值(只能是变量)


delimiter $$  
create procedure tk1(in 调用名称 varchar(20));
begin
select * from fuck name=调用名称;
end $$

delimiter ;
call tk1( 'lisi');


查看存储过程
show procedure status\G;
show create procedure 存储过程名称\G;

修改存储过程
alter procedure <过程名> [ < 特征>....]


alter procedure tk modifies sql security invoker;

modifies sql data  表明子程序包含写数据的语句
security    安全等级
invoker     当定义为invoker 时,只要执行者有执行权限,就可以执行成功

删除存储过程
drop procedure if exists tk;

linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第8张图片
linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第9张图片
linux MySQL高级语句 | 进阶(三)| 详细讲解 | 超详细_第10张图片

你可能感兴趣的:(数据库,mysql)