视图
创建视图
create or replace view vw_yourname as
select * from dim_date
使用场景
- 全表不适合展示给对方看,建表定时跑数又麻烦,这时候利用视图的自动刷新功能,共享视图就可以了
- 有些经常跑的查询,可以建完视图,点开的时候就会自动跑
例如我经常要检查数据的日期是不是最新的,就创建了一个视图
create or replace view vw_max_date
select max(日期) from dim_date
后面每次检查的时候打开,就相当于运行了查询
select max(日期) from dim_date
存储过程
存储过程和本地保存的查询的区别主要在于:
- 存储位置
- 存储过程是上传到数据库服务器的,亦即你在任何一台电脑打开都可看到
- 本地查询是保存在你的电脑上的,只有在这台电脑上能看到
- 用法
- 存储过程能使用一些高级功能,例如if…then…,while循环或者更多更高级的
- 本地查询无法使用if…then…,也无法使用while循环
- 定时任务
- 存储过程可以通过事件定时在服务器上运行
- 本地查询只能通过本地的自动运行定时在本机运行
- 账号权限
- 存储过程一般只有root账号能查看和运行,也可以授权但是默认不会授权
- 本地查询不需要账号权限
基本写法如下
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';
具体可见本篇上方的存储过程→循环