【数据库复习_视图】

一.什么是视图

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。除非是视图索引,否则视图的数据不会存储在数据库中。


二.视图的作用

1.使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件

2.增加数据的安全性,通过视图,用户只能查询和修改指定的数据。

3.提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。


三.创建视图

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
       VIEW 视图名 [(属性清单)]
       AS SELECT 语句
       [WITH [CASCADED|LOCAL] CHECK OPTION];

ALGORITHM表示视图选择的算法(可选参数)

         UNDEFINED:MySQL将自动选择所要使用的算法

      MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
      TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句

建议:创建视图时,最好加上with cascaded check option参数,这种方式比较严格,可以保证数据的安全性。


看几个demo

create table work(
	id int,
	na varchar(32),
    sex varchar(32),
    age int,
    address varchar(32),
    tel int
);

insert into work values(1,'张三','男',18,'北京',12313213),(2,'李四','女',23,'上海',123231),(3,'王五','男',24,'西安',10022233),(4,'赵六','女',25,'天津',111111)

insert into work values(5,'哈哈','男',25,'武汉',12313)

create table salary(
	id int,
    salary double
);

insert into salary values(1,1232),(2,1313),(3,24131),(4,76465);

create view work_view(ID,NAMES,ADDRESS) as select id,na,address from work;

create view work_view2(id,names,salary) as select work.id,na,salary from work,salary where work.id=salary.id

select * from work_view2

answer is :

1	张三	1232
2	李四	1313
3	王五	24131
4	赵六	76465

也可以看看视图的基本信息:

desc work_view2
id	int(11) 	YES		
names	varchar(32)	YES		
salary	double	        YES		

创建索引视图:(经常用于很少更新基础数据,否则性能不一定会更好)

可以为视图创建一个唯一的聚集索引,这样视图称为索引视图。

索引视图可以提高下列查询类型的性能:

1.处理大量行的连接和聚合。

2.决策支持。


四.修改视图

当基本表的某些数据的格式改变后,可以修改视图来保持视图和基本表之间的一致。

修改方式1.CREATE OR REPLACE 

mysql> CREATE OR REPLACE ALGORITHM=TEMPTABLE
    -> VIEW work_view(ID,NAME) 
    -> AS SELECT id,name FROM work;
Query OK, 0 rows affected (0.03 sec)
当视图不存在时,可以创建视图,存在时,修改视图。

修改方式2.ALTER语句修改

mysql> ALTER VIEW work_view2(NAME,SALARY,ADDR)
    -> AS SELECT name,salary,address FROM work,salary
    -> WHERE work.id=salary.id;
Query OK, 0 rows affected (0.03 sec)

五.视图数据的修改

可以通过视图修改基本表的数据。其方式与修改表中的数据一样。但是存在诸多限制:

1.不能修改使用了聚合函数(sum,ave,count)的计算列

2.不能修改使用了集合运算符(union,union all,cross join)形成的列得出的结果

3.如果视图中使用了连接查询,则update、insert 只能影响连接的一端<此处我的理解,每次修改只能修改一张表内的内容。不能同时修改两张表的内容。

>。并且不能从视图中删除数据。

六。删除视图

语法:

mysql> DROP VIEW IF EXISTS work_view;
Query OK, 0 rows affected (0.00 sec)  
 mysql> DROP VIEW work_view2;
Query OK, 0 rows affected (0.01 sec)
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值