7.3视图

7.3视图概述

1. 视图的概念

视图是指从一个或多个表(或视图)导出的表,它与基本表不同,是虚拟表。

2 . 视图的分类

(1)基于单表的视图:从单个表中导出的视图。在基于单表的视图中若只是去了基本表的某些行或某些列,但保留了主键,这种视图称为行列子集视图。
(2)基于多表的视图:从多个表中导出的视图。
(3)基于视图的视图:从一个或多个视图中导出的视图。
(4)基于表和视图的视图:从基本表和视图中导出的视图

3. 视图的优点

(1)视图能够简化用户的的操作。
(2)视图为重构数据库提供了一定程度的逻辑独立性。
(3)视图能够对机密数据提供安全保护。

7.4 MySQL 视图管理

7.4.1 视图的建立

1. 创建基于单表的视图

语法格式:
CREATE VIEW 视图名
AS
SELECT 查询语句 ;

例如建立视图view_sdept,包含系别信息。

CREATE VIEW view_sdept 
 AS
 SELECT  DISTINCT sdept FROM student;

视图中定义了DISTINCT,因此视图中的每个系别只出现一次。

语法格式:
CREATE VIEW 索引名
AS
SELECT 复杂查询语句;

例如建立计算机系学生的视图view_cs,包含sno,sname,sdept,birthday,totalcredit ,remarks。

CREATE VIEW view_cs
AS 
SELECT sno,sname,sdept,birthday,totalcredit,remarks
 FROM student
 WHERE sdept='计算机';

语法格式:
CREATE VIEW 视图名
AS
SELECT 复杂查询语句
WITH CHECK OPTION;

例如建立通信工程系学生的视图view_ce,包含sno,sname,sdept,birthday,totalcredit ,remarks,并要求进行修改和插入操作后仍保证该视图只有通信工程系的学生。

CREATE VIEW view_ce
AS
SELECT sno,sname,sdept,sex,birthday,totalcrdeit,remarks
FROM student
WHERE  sdept='通信工程'
WITH CHECK OPTION ;

定义view_ce视图时加上了WITH CHECK OPTION参数,这样对视图进行插入、修改和删除操作时,RDBMS会自动加上dept=‘通信工程’的调件。
以上3个基于单表的视图,view_cs和view_ce保留了主键,均为行列子集视图;view_sdept视图不包含主键,不是行列子集视图。

建立反映学生年龄的视图view_age,包含sno ,sname,age。

CREATE VIEW  view_age(sno,sname,age )
AS 
SELECT sno,sname,YEAR(curdate())-YEAR(birthday)
FROM student;

年龄需要使用表达式YEAR(curdate()) - YEAR(birthday)。
可在SELECT语句中为表达式的列名,则视图会使用别名作为默认名。

CREATE VIEW view_age 
AS 
SELECT sno,sname,YEAR(curdate())-YEAE(birthday) as age
FROM student;

创建反映学生平均成绩的视图view_avgscore,包含sno,avgscore。

CREATE VIEW view_avgscore
AS 
SELECT sno ,AVG(grade) as avgscore
FROM score group by sno;

平均 成绩需要使用聚集函数得到,view_avgscore是分组视图。

2. 创建基于多表的视图

例如建立计算机选修了102号课程的学生的视图view_cs_102,包含sno,sname,grade.

CREATE VIEW view_cs_102 
AS
SELECT student.sno ,sname,grade FROM student,score
WHERE student.sno = score.sno and sdept='计算机' and cno='102';

3. 创建基于视图的视图

例如计算机系选修了102号课程且成绩不低于90分的学生的视图view_cs_102_90,包含sno,snam,grade。

CREATE VIEW view_cs_102_90
AS
SELECT sno ,sname,grade
 FROM view_cs_102
 WHERE grade>=90;

7.4.2 视图的查看

1. 使用DESCRIBE语句查看视图

使用DESCRIBE 或DESC语句不仅可以查看表的基本字段信息,还可以查看视图的字段信息,包含字段名、字段类型等信息。

语法格式:
DESCRIBE 视图名;

例如查看view_cs的字段信息。

DESCRIBE view_cs;

视图字段信息

  • Field: 字段名。
  • Type: 字段的数据类型
  • Null: 表示该列是否可以为空。
  • Key: 表示该列是否已有索引。
  • Default: 表示该列是否有默认值。
  • Extral: 表示获得到的与给定列相关的附加信息。

2. SHOW CREATE VIEW 语句查看视图

使用SHOW CREATE VIEW 语句不仅可以查看创建视图的语句,还可以查看视图的字符编码。

语法格式:
SHOW CREATE VIEW 视图名

例如查看视图view_ce的创建语句。

SHOW CREATE VIEW view_ce;

3. 在views表中查看视图

所有视图的定义都存储在information_schema数据库下的views 表中,也可以在这个表中查看视图的详细信息。

语法格式:
SELECT * FROM information_schema.views WHERE table_name=‘视图名’;
例如查看视图view_cs_102的信息

SELECT * FROM information_schema.views 
WHERE table_name='view_cs_102';

7.4.3 视图的修改

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

例如修改视图view_cs,删除备注字段remarks.

create or replace view view_cs
as
select sno,sname,sdept,birthday,totalcredit
from student
where sdept='计算机';

2. 使用ALTER 语句修改视图

语法格式:
ALTER VIEW 视图名
AS
SELCET(复杂查询语句)

alter view view_cs
as 
select sno,sname,sdept,birthday,totalcredit
from student
where sdept='计算机';

7.4.4 视图的更新

1. 通过视图插入数据

语法格式:
INSERT
INTO 视图名
VALUES(‘字段1的值’,‘字段2的值’ …‘字段n的值’)

例如在view_ce插入一条数据,其中sno=‘1208’,sname=‘李小荣’,dept=‘通信工程’,ssex=‘女’,birthday=‘2004-4-3’,totalcredit=0;

INSERT 
INTO view_ce 
VALUES ('1208', '李小荣', '通信工程', '女', '2004-4-3', 0);

2. 通过视图修改数据\

语法格式:
UPDATE 视图名
SET 字段名=新字段值
WHERE

例如将视图view_ce中sno为1208的学生的remarks修改为“优秀团员”

update view_ce
set remarks='优秀团员'
where sno='1208'l;

3. 通过视图删除数据

例如使用delete语句将通信工程系学生视图view_ce中sno为1208的学生删除。

delete
from view_ce
where sno='1208';

7.4.5 视图的删除

语法格式:
DROP VIEW 视图名

例如删除视图view_cs_102.`

drop view view_cs_102;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值