Mysql 视图view

1.视图的定义:视图是由查询结果形成的一张虚拟表

2.视图的创建语法:

create view 视图名 as select语句;
3.视图的删除语法

drop view 视图名;
4.为什么要视图

(1).简化查询
(2).可以进行权限限制
把表的权限封锁,开放视图权限,视图里只开放表的部分数据
(3).大数据分表时可以用到
比如,表的行数超过200万行时,就会变慢
可以把一张表的数据拆成四张表来存放
news 表
newsid 1,2,3,4。。。
分成news1,news2,news3,news4表

把一张表的数据分散到4张表里,分散的方法很多
最常用的可以用id取模来计算
id%4+1={1,2,3,4}

分完表后,又要查询数据,怎么办?
比如:$_GET["id"]=17,
17%4+1=2,$tablename = 'news'.'2'

select * from news2 where id=17;//这个可以先不会,大数据分表

把四张表形成一张视图
create view viewnews as select from news1 union select from news2 ......;

5.视图的修改语法

alter view 视图名 as select xxxxxx


6.视图和表的关系
视图时表的查询结果,自然表的数据改变了,就会影响视图的结果

扫描二维码关注公众号,回复: 2362387 查看本文章


7.视图改变了,表的变化

(1).视图的增删也会影响表
(2).但是,视图并不是总是可以增删改
	答:视图的数据与表的数据一一对应时,可以修改。
	对于视图的insert 还应注意,视图必须包含表中没有默认值的列。
	(有默认值的,在视图insert不包含的话,表会自动填充默认值,
	没有默认值的,表会不知道如何处理改列的值)
8.视图的algorithm

algorithm = merge / temptable / undefined
merge:当引用视图时,引用视图的语句与定义视图的语句合并
temptable:当引用视图时,根据视图的创建语句建立一个临时表
undefined:未定义,自动,让系统帮你选

create algorithm=merge / temptable / undefined view 视图名 as select语句;

merge意味着视图只是一个规则,语句规则,当查询视图时,把查询视图的语句(比如where那些)
与创建时的语句 where子句等合并,分析,形成一条select语句。
(其实视图就是创建视图时的筛选条件,select视图的最终目标,查的还是表)

而temptable是根据创建语句在引用时瞬间创建一张临时表(数据库中真实存在)
然后查询视图的语句从该临时表查询


猜你喜欢

转载自blog.csdn.net/hk_jy/article/details/80430514
今日推荐