再来一篇MySql10分钟进阶


视图

创建视图

create or replace view vw_yourname as 
	select * from dim_date

使用场景

  1. 全表不适合展示给对方看,建表定时跑数又麻烦,这时候利用视图的自动刷新功能,共享视图就可以了
  2. 有些经常跑的查询,可以建完视图,点开的时候就会自动跑
    例如我经常要检查数据的日期是不是最新的,就创建了一个视图
create or replace view vw_max_date
	select max(日期) from dim_date

后面每次检查的时候打开,就相当于运行了查询

select max(日期) from dim_date

存储过程

存储过程和本地保存的查询的区别主要在于:

  • 存储位置
    1. 存储过程是上传到数据库服务器的,亦即你在任何一台电脑打开都可看到
    2. 本地查询是保存在你的电脑上的,只有在这台电脑上能看到
  • 用法
    1. 存储过程能使用一些高级功能,例如if…then…,while循环或者更多更高级的
    2. 本地查询无法使用if…then…,也无法使用while循环
  • 定时任务
    1. 存储过程可以通过事件定时在服务器上运行
    2. 本地查询只能通过本地的自动运行定时在本机运行
  • 账号权限
    1. 存储过程一般只有root账号能查看和运行,也可以授权但是默认不会授权
    2. 本地查询不需要账号权限

基本写法如下

create procedure yourname()
begin 
	select 'yoursql';
end

传入参数

传参

create procedure yourname(in yourdate date)
begin 
	select * from dim_date where 日期 >= yourdate;
end	

不传参

create procedure yourname()
begin 
	select * from dim_date;
end

进阶功能

if…then…

create procedure yourname(in yourdate date)
begin 
	if yourdate = curdate() then
		select * from dim_date where 日期 > yourdate;
	else
		select * from dim_date where 日期 < yourdate;
	end if;
end

循环

create procedure yourname(in yourdate date)
begin 
	declare loop_date date default '2020-06-01';
	set loop_date = curdate();
	while loop_date <= yourdate do 
		#一般用来循环删除,插入
		delete from tmp_dim_date where 日期 = loop_date;
		insert into tmp_dim_date 
			select * from dim_date where 日期 = loop_date;
		set loop_date = date_add(loop_date,interval 1 day);
	end while;
end 

事件

Navicat的事件功能中,可以方便的设置事件,通过call调用存储过程,例如

call your_precedure_name();

规范点的调用是

begin 
	set @a = curdate();
	start transaction;
	call your_procedure_name(@a);
	commit;
end

参数

@

通过set可以在查询中便捷的使用参数,一般是以@开头,可以在本地查询使用

set @a = date_sub(curdate(),interval 1 day); #昨日
set @b = date_sub(@a,interval day(@a)-1 day);#基于昨日的月初

declare

declare要求在存储过程中使用,并且不限定开头字符,可以随便写.不能在本地查询写

declare start_date date default '2020-06-01';

具体可见本篇上方的存储过程→循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但老师

要是看起来爽 求打赏一耳光

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值