mysql视图

1、视图作用

关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。(采用moxigandashu关于视图的理解)

2、关于视图的理解

实际使用时,视图其实和表没多大的差别。把视图当作表的概念来创建以及使用。但是切记视图不是表,是”虚拟表”,不保存数据!关于视图打个比方,大家在工作中使用电脑时,在磁盘中通过一层层的路径找到自己想要的文件时,很麻烦。现在视图相当于在你工作前,你找到文件不关掉弹框,下次查看文件内容时直接点击弹框就行了,很方便很快捷。

 

3、 视图相关的MySQL指令

操作指令代码
创建视图CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
使用视图当成表使用就好
修改视图CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
查看数据库已有视图>SHOW TABLES [like...];(可以使用模糊查找)
查看视图详情DESC 视图名或者SHOW FIELDS FROM 视图名
视图条件限制[WITH CHECK OPTION]

4、视图的创建

需求:由txn_so_wp_mstr表中取出team_id,team_name,bpc_finish_time

create view view_test(team_id,team_name,bpc_finish_time) as
select team_id,team_name,bpc_finish_time
from txn_so_wp_mstr;

注意:视图创建不支持子查询!如下:

create view workteam_capacity_kpi(work_team_id,work_team_name,car_cnt,plate_cnt,dim_dt) as
select
	 plate.work_team_id AS work_team_id
	,plate.work_team_name AS work_team_name
	,car.car_cnt AS car_cnt
	,plate.plate_cnt AS plate_cnt
	,plate.dim_dt2 AS dim_dt
from
(
	select 
		 count(*) AS car_cnt
		,team_id
		,team_name
		,substr(bpc_finish_time,1,7) AS dim_dt1
	from txn_so_wp_mstr
	where bu_id = 'buid' 
		and bpc_check_result = '915f21a8-5cc0-46e5-bd25-54cb2e1bd0b1'
	group by team_id,team_name,dim_dt1
)car
right join
(
	select
		 count(dis.process_id) AS plate_cnt
		,dis.work_team_id
		,dis.work_team_name
		,substr(dis.work_end_time,1,7) AS dim_dt2
	from txn_so_wp_dispatch dis
	left join mdm_bu_mstr bu
	on dis.create_org_no = bu.bu_no
	where bu.id = 'buid'
	and dis.status = '完工'
	and dis.is_quality_check = '1'
)plate
on car.team_id = plate.work_team_id and car.dim_dt1 = plate.dim_dt2
order by plate.dim_dt2

报错信息:1349 - View's SELECT contains a subquery in the FROM clause

5、 通过视图变更数据

(1)可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

比如,一个视图view1,数据由A、B、C三张表获取。在你insert into view1时,只能一次性的操作一张表的数据。

(2)注:如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

如下:创建了限制条件bu_id = 'build'的视图

create view view_test(team_id,team_name,bpc_finish_time) as
select team_id,team_name,bpc_finish_time
from txn_so_wp_mstr
where bu_id = 'buid'
with check option;

那么当insert into view_test 时不满足条件(bu_id = 'build')时,会报错。

(3)在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,可以成功执行,但是会导致数据无辜丢失,因此创建视图时建议加上“WITH CHECK OPTION”命令

6、总结:

  1. 视图可以看做表来用,但不是表,无法存储数据,是‘虚拟’的;
  2. 创建视图时不能有子查询,会报错;
  3. 创建视图时建议在结尾加上:WITH CHECK OPTION,一般和where子句一起使用;

  4. 对于视图进行更新数据时只能一次性的对一个数据源表操作,否则报错。

                                                                         ----多处采用moxigandashu的博文。如有错误请提醒,持续更新,转载请声明

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值