四、视图的引入

视图的概念:

视图是一张虚拟的表,是从数据库中一个或多个表中导出来的表;视图是不存在物理数据的;使用视图查询时,数据来源于数据库原表中的数据。具有普通表的结构,但是不实现数据存储。

视图的作用:

1.操作简便化:我们可以建立一些简单的视图,所见即所得。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2.增加数据的安全性:比如写代码时使用视图,不直接操作数据库表。可能原数据库表中的某些字段有很重要的信息,我们不对外公开,使用视图可以屏蔽掉不使用,只能操作可见到的数据,这样数据更加安全。

3.提高表的逻辑独立性:视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

视图的缺点:

1.性能开销大:

数据库必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也要把它变成一个复杂的结合体,需要花费一定的时间。

2.修改限制:

当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

参考表数据:

视图的创建:

这样,我们就创建好了一个视图:

下面我们来使用一下这个视图:

--从视图中检索数据,执行:

SELECT * FROM v1;

-- 定义一个只有书名和价格字段的视图:

create view v2 as select bookName,price from t_book;

--从v2视图中检索数据:

select * from v2;

这样只能检索到相关的列 保证了数据的安全性和独立性

你认为这样很安全吗?字段名还是被开发人员给看到了 我们可以给视图中的列单独取名字:

--创建单表视图(自定义列名):

create view v3(自定义的名字,p) as select bookName,price from t_book;

-- 执行:

select * from v3;

--结果:

--多表上创建视图:

create view v4 as select t1.bookName,t2.bookTypeName from t_book t1,t_booktype t2 WHERE t1.bookTypeId=t2.id; 

--检索数据:

SELECT * FROM v4;

--结果:

查看视图:

1. DESCRIBE 语句查看视图基本信息

执行语句: DESCRIBE v4;

或者省略写法: DESC v4;

2.SHOW TABLE STATUS 语句查看视图基本信息:

执行语句:SHOW TABLE STATUS LIKE 'v4' 可以看到最后comment是View

可以对比执行:SHOW TABLE STATUS LIKE '表名' 看看 有什么不同

 3.SHOW CREATE VIEW 语句查看视图详细信息

执行语句:SHOW CREATE VIEW v4

4.在 views 表中查看视图详细信息:

系统库中有一张VIEW表:

 修改视图:是指修改数据库中,存在的视图的定义 
                   比如,当基本表中的某些字段发生变化时,可以通过修改使徒的方式,来保持视图与基本表的一致性 

1.用  CREATE  OR  REPLACE   VIEW  语句修改视图

我们把之前建立的V1 视图 改为只有bookName和price 两个字段:

执行语句:CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book

用这个命令时视图存在就修改,不存在就创建;

 

2. 用  ALTER  语句修改视图

ALTER VIEW v1 AS SELECT * FROM t_book

更新视图:更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。
超出了范围,就不能更新。

 

 插入(INSERT):

INSERT INTO v1 VALUES(NULL,'java good','120','fang',1);

 

 更新(UPDATE)

UPDATE v1 SET bookName='java very good',price=200 WHERE id=5;

 

删除(DELETE)

DELETE FROM v1 WHERE id=5;

删除视图:删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;

删除V4视图:

DROP VIEW IF EXISTS v4;

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值