一.视图简介
含义:视图是一种虚拟的表,从数据库中的一个或者多个表中导出的表。数据并没有导出,还在原来的表中,但可以利用视图查询数据;当数据变的时候,视图查询的数据也在变。
作用
- 使操作简单化:想要了解什么信息就加入视图。
- 增加数据安全性:视图只能查询修改某些数据,可以保证权限
- 提高表的逻辑独立性:原先表的变化不会对视图造成影响
二.创建视图
CREATE [ALGORITHM = {UNDIFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM
:表示视图选择的算法。UNDIFINED
:表示MySQL自动选择算法MERGE
:将使用视图的语句与视图定义合并起来,使视图定义的某一部分取代语句的对应部分TEMPTABLE
:将视图结果存入临时表,使用临时表执行语句- 视图名:要创建视图的名称
- (属性清单):指定视图中各个属性的名词,默认与SELECT语句中查询的属性相同
SELECT 语句
:从某个表中查询某些符合条件的记录[WITH [CASCADED|LOCAL] CHECK OPTION]
:表示更新视图时候要保证在该视图权限范围之内。CASCADED
:更新视图时,要满足所有相关视图和表的条件LOCAL
:更新视图时,满足视图本身定义的条件即可
创建视图时,最好带上
[WITH CASCADED CHECK OPTION]
,使约束更加严格,可以保证数据的安全性
创建视图还需要先查询是否有权力创建,代码如下:
SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user='用户名'
Select_priv
:表示用户是否具有select权限Create_view_priv
:表示用户是否具有create view权限
三.查看视图
DESCRIBE|DESC 视图名;
SHOW TABLE STATUS LIKE '视图名';
:因为LIKE后匹配的是字符串,所以要加上单引号SHOW CREATE VIEW 视图名;
SELECT*FREOM information_schema.views;
:查看所有视图信息
四.修改视图
CREATE OR REPLACE [ALGORITHM = {UNDIFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALTER [ALGORITHM = {UNDIFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
CREATE OR REPLACE不仅可以修改视图还可以创建视图,而ALTER只能修改,所以一般选择CREATE OR REPLACE
五.更新视图
通过UPDATA,INSERT,DELETE来操作表中的数据,更新视图时候,原本表中的数据也会更新
不是所有视图都能更新,不能更新的有
- 视图包含SUM(),MAX(),MIN(),COUNT()等函数
- 包含UNION、UNION ALL、DISTINCT、GROUP BY、HAVIG等关键字
- 常量视图
- 视图SELECT包含子查询
- 不可更新的视图导出的视图
- ALGORITHM = TEMPTABLE类型
- 视图对应的表上存在没有默认值的列,而且该列没有包含在视图里面
- [WITH [CASCADED|LOCAL] CHECK OPTION];也能绝对视图的更新范围
视图更新限制很大,更新需要谨慎
六.删除视图
DROP VIEW [IF EXISTS]视图名列表 [RESTRICT|CASCADE]
视图名用逗号隔开