MySQL视图的优缺点以及如何创建视图

视图,虚拟表,从一个表或多个表中导出来的表,作用和真实表一样,包含一系列带有行和列的数据 视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全

优点及缺点

优点

简单化,数据所见即所得

安全性,用户只能查询或修改他们所能见到得到的数据

逻辑独立性,可以屏蔽真实表结构变化带来的影响

缺点

性能相对较差,简单的查询也会变得稍显复杂

修改不方便,特变是复杂的聚合视图基本无法修改

创建视图语法详解

语法结构:

{ CREATE|REPLACE } [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [{column_list}]

AS SELECT_STATEMENT

[WITH [CASCADED | LOCAL |] CHECK OPTION]

释义:

CREATE|REPLACE : 【创建|替换已创建的】视图

ALGORITHM : 视图算法

1.UNDEFINED 系统自动选择算法

2.MERGE使用的视图语句与视图定义合并起来

3.TEMPTABLE 结果存入临时表,然后用临时表执行语句

view_name : 视图名称

column_list : 属性列

SELECT_STATEMENT :SELECT语句

[WITH [CASCADED | LOCAL |] CHECK OPTION] 表示视图在更新时保证在视图的权限范围内

1.CASCADED 默认值 更新视图时要满足所有相关视图和表的条件,2.LOCAL表示更新视图时满足该视图本身定义的条件即可。

示例用表

测试表:user有id,name,age,sex字段

测试表:goods有id,name,price字段

测试表:ug有id,userid,goodsid字段

视图的作用实在是太强大了,以下是我体验过的好处:

作用一:

提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:

1 select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

但有了视图就不一样了,创建视图other。示例

1 create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

创建好视图后,就可以这样获取user的name和goods的name。示例:

select * from other;

以上sql语句,就能获取user的name和goods的name了。

作用二:

对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆分为表usera和表userb,该两张表的结构如下:

测试表:usera有id,name,age字段

测试表:userb有id,name,sex字段

这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

1 create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;

以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。

作用三:

提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:

1 create view other as select a.name, a.age from user as a;

这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。

作用四:

让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧

原文地址:https://www.cnblogs.com/guliang/p/11698032.html

时间: 2024-08-01 00:52:35

MySQL视图的优缺点以及如何创建视图的相关文章

SQL SERVER先判断视图是否存在然后再创建视图的语句

如果我们的语句为: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 IF NOT EXISTS(SELECT 1 FROM sys.views WHERE name='Report_IndividualTicket') BEGIN create view Report_IndividualTicket as SELECT Ticket.TicketNumber, Ticket.TicketID, GisProcess.StageName, Content.DtReceived,

SQL Server创建视图

什么是视图 大家都知道,我们国家现在“神七”上天了.从美国的月球登月开始,人类上天不再是神话.听说,在美国,你只要出几十万美元,您就可以上一次月球进行太空旅行,所以,我们相信:在不久的将来,上天旅行将走进我们百姓的生活,那是一件多么新鲜神奇的事情啊.好多美国人上天后,他们用望远镜观看我们的地球,结果看到的地球形状各不相同.有的说象绿色的橘子,有的说象白色的大鸭梨,有的说象蓝色的大西瓜.这是为什么呢?你肯定会说:那是因为从不同的角度(视角),看到的不同形状而已.那么,从不同的视角,将看到不同的“图

创建视图索引

创建视图索引需要注意哪些事项 1.创建索引时提示该视图未绑定到架构(创建视图时加上schemabinding关键字则不能*号存在索引中) 解决方法:在创建视图的时候加上schemabinding 例句:CREATE VIEW [dbo].[viewTable] with schemabinding AS select ID from ..... 2.加上schemabinding建立索引的时候又提示必须先创建唯一聚集索引 解决方法: 在创建视图时加上UNIQUE  CLUSTERED 例句: C

SQLServer之创建视图

视图定义 视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成. 使用SSMS数据库管理工具创建视图 1.连接数据库,选择数据库,展开数据库->右键视图->选择新建视图. 2.在添加表弹出框->选择要创建视图的表.视图.函数.或者同义词等->点击添加->添加完成后选择关闭. 3.在关系图窗格中->选择表与表之间关联的数据列->选择列的其他排序或筛选条件. 4.点击保存或者ctrl+s->刷新视图->查

SQLSERVER 和 ORACLE 创建视图

SQLSERVER if exists(select * from sysobjects where id=OBJECT_ID(N'VW_SZYD_YTCT') and objectproperty(id,N'IsView')=1) drop view VW_SZYD_YTCT --删除视图go create view VW_SZYD_YTCT --创建视图asSELECTK.SZYDHYB_NM AS HYNM,K.SZYDHYB_TBDWBH AS TBDWBH,K.SZYDHYB_TBDW

MySQL 数据库视图:视图定义、创建视图、修改视图

简介 1·视图的概念2·创建视图3·使用视图 1·视图的概念什么是视图,一下咱们举个例子: 一个老板想要了解几个仓库的具体信息,想知道几个仓库里面还有多少大米.面粉.有多少种类,于是派出一个得力干将小王去清点货物,小王跑了很远之后终于清点完毕回报给老板.由于老板的生意很好,仓库的里面的东西经常发生变化,这时老板又需要知道几个仓库里的库存明细,又派小王去清点.这样来来回回,老板觉得小王台辛苦,也不容易,老板就多顾了几个人,A员工看守仓库1,B员工看守仓库2,C员工看守仓库3.这样就不需要来来回回跑

Mysql创建视图,生成存储过程

-- select * from (SELECT nid from part where nid > 2) as A -- create view V1 AS -- create view V1 AS #创建视图 -- select man_to_woman.nid,man.name as mname,woman.name as wname from man_to_woman -- LEFT JOIN man ON man_to_woman.man_id = man.nid -- LEFT JO

Mysql学习笔记(十一)临时表+视图

原文:Mysql学习笔记(十一)临时表+视图 学习内容: 临时表和视图的基本操作... 临时表与视图的使用范围... 1.临时表   临时表:临时表,想必大家都知道这个概念的存在...但是我们什么时候应该使用到临时表呢?当一个数据库存在着大量的数据的时候,我们想要获取到这个数据集合的一个子集,那么我们就可以使用临时表来保存我们想要的数据..然后对临时表进行操作就可以了...使用临时表必然是有原因的..使用临时表会加快数据库的查询性能.... create temporary table tmp_

mysql基础(九) 索引和视图

索引:是一种按照特定存储格式存储的特殊数据,用于SQL查询 索引的类型:     聚集索引和非聚集索引:数据是否和索引存储在一起   主键索引和辅助索引:索引是否在主键之上   左前缀索引和覆盖索引:是否只截取左边的前几个字节最为索引,mysql默认使用左前缀索引 左前缀索引的存储:   在指定索引的字段中截取左边的前几个字节生成索引,并对索引进行排序处理,将排完序的索引进行分组管理   并生成源数据,当用户以索引字段作为查询条件时,mysql去扫描元数据,并定位到元数据对应数据的上 索引管理: