首页 > 代码库 > mysql基础之视图

mysql基础之视图

原文: mysql基础之视图

在查询中,我们经常把查询结果 当成临时表来看.

View是什么? View可以看一张虚拟表是表通过某种运算得到的一个投影.

既然视图只是表的某种查询的投影,所以主要步骤在于查询表上.查询的结果命名为视图就可以了.

视图与表的关系

视图是表的查询结果,自然表的数据改变了,影响视图的结果.

 

视图改变了呢?

0: 视图增删改也会影响表

1: 但是,视图并是总是能增删改的.

 

视图某种情况下,是可以修改的.

要求视图的数据和表的数据 11对应就像函数的映射.

-->推出视图对应的数据

视图-->推出表对应的数据


视图的定义:

视图是由查询结果形成的一张虚拟表.sql查询结果

 

视图的创建语法:

Create view 视图名 as  select 语句;

 

视图的删除语法:

Drop view 视图名

 

视图的修改

Alter view 视图名 as select xxxxxx

 

 

为什么要视图?

:1:可以简化查询

 

2: 可以进行权限控制

把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据

 

3: 大数据分表时可以用到

比如,表的行数超过200万行时,就会变慢,

可以把一张的表的数据拆成4张表来存放


视图的algorithm

Algorithm = merge/ temptable/ undefined

Merge: 当引用视图时,引用视图的语句与定义视图的语句合并.

Temptable:当引用视图时,根据视图的创建语句建立一个临时表

Undefined:未定义,自动,让系统帮你选.

 

Merge,意味着视图只是一个规则,语句规则当查询视图时,

把查询视图的语句(比如where那些)与创建时的语句where子句等合并,分析.

形成一条select 语句.

创建视图的语句:

mysql> create view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price>2000

查询视图的语句:

select * from g2  where shop_price < 3000;

 

最终执行的语句:

select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000 and shop_price < 3000

 

temptable是根据创建语句瞬间创建一张临时表,

然后查询视图的语句从该临时表查数据.

create algorethm=temptable view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000

查询视图的语句:

 select * from g2  where shop_price < 3000;

 

最终执行的2句话取数据并放在临时表,然后去查临时表.

Select  goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000;

========> temptable

 

再次查临时表

Select * from temptable where shop_price< 3000



mysql基础之视图