第六周(Mysql视图)
1. 视图的优点
- 为用户集中数据,简化用户数据的查询处理
- 屏蔽数据库的复杂性
- 简化用户权限的管理
- 便于数据共享
- 可以重新组织数据一边输出到其他应用程序
2. 创建视图语法
CREATE [OR REPLACE] VIEW 视图名 [(列名···)]
AS SELECT 语句
# OR REPLACE :能够替换已有的同名视图
# 例子一
# 假设当前数据库是test,创建xscj数据可上的cs_kc视图,包含
#计算机专业各学生的学号、其选修的课程号及成绩。要保证对该
#视图的修改都符合专业名为计算机这个条件
CREATE OR REPLACE VIEW xscj.cs_kc
AS
SELECT xs.`学号`,课程号,成绩
FROM xscj.`xs`,xscj.xs_kc
WHERE xs.`学号`=xs_kc.`学号` AND xs.`专业名`='计算机'
WITH CHECK OPTION;
#查询视图
DESCRIBE cs_kc;
# 例子二
# 创建xscj数据库上的计算机专业学生的平均成绩视图cs_kc_avg
#包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)
USE xscj;
CREATE VIEW xs_kc_avg(num,score_avg)
AS
SELECT 学号,AVG(成绩)
FROM xs_kc
GROUP BY 学号;
#查询视图
DESCRIBE xs_kc_avg;
# 例子三
# 查找平均成绩80分以上的学生的学号和平均成绩
CREATE OR REPLACE VIEW xs_kc_avg(num,score_avg)
AS
SELECT 学号,AVG(成绩)
FROM xs_kc
GROUP BY 学号;
#再对xs_kc_avg视图进行查询
SELECT *
FROM xs_kc_avg
WHERE score_avg>=80;
3. 视图更新
-
可更新视图
- 对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系
- 如果视图中包含下述中的任何一种,那么它就是不可更新的
- 聚合函数
- Distinct关键字
- Group by子句
- Order by子句
- Having子句
- Union子句
- 位于选择列表中的子查询
- From子句中包含多个表
- Select语句中引用了不可更新视图
- Where子句中的子查询,引用from子句中的表
- Algorithm选项指定为temptable(使用临时表总会使视图成为不可更新的表)
-
插入数据
# 例子四 #创建视图cs_xs视图中包含计算机专业的学生信息,并向cs_xs试图插入一条记录 CREATE OR REPLACE VIEW cs_xs AS SELECT * FROM xs WHERE 专业名='计算机' WITH CHECK OPTION; #插入数据 INSERT INTO cs_xs VALUES('081225','李牧','计算机',1,'1994-10-14',50,NULL,NULL); #查看视图cs_XS SELECT* FROM cs_xs;
-
更新数据
# # 将cs_kc视图中学号为'081101'的学生的101课程成绩修改为90分 UPDATE cs_kc SET 成绩=90 WHERE 学号='081101' AND 课程号='101';
-
修改视图
# 将cs_xs视图修改为只包含计算机专业学生的学号、姓名和总学分三列 ALTER VIEW cs_xs AS SELECT 学号,姓名,总学分 FROM xs WHERE 专业名='计算机'; SELECT * FROM cs_xs;
-
删除视图
#删除视图 DROP VIEW IF EXISTS cs_xs;