2学时
(1)熟练掌握T-SQL语句创建与维护索引的方法。 (2)掌握视图创建、更改的方法。 (3)掌握用视图管理数据的方法。
索引分为两种:聚簇索引和非聚簇索引。每张表只能有一个聚簇索引。创建索引时的缺省设置是非聚簇索引。 1.使用SQL语句为course表的课程编号创建唯一性索引,命名为cno_idx。(8分)
CREATE UNIQUE INDEX Cno_idx ON course(Cno ASC);
2.使用SQL语句为sc表的“成绩”字段创建一个普通索引,命名为sc_idx。(8分)
CREATE INDEX sc_idx ON sc (Grade ASC);
3.使用SQL语句为sc表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为sc_sno_cno_idx。(8分)
CREATE UNIQUE INDEX sc_sno_cno_idx ON sc (Sno ASC,Cno ASC);
4.查看SC表上的索引信息。(提示:MySQL使用show index)(8分)
SHOW INDEX FROM sc;
5.使用SQL语句删除索引sc_idx。再次查看sc表上的索引信息。(8分)
ALTER TABLE sc DROP INDEX sc_idx;
SHOW INDEX FROM sc;
1.使用SQL语句CREATE VIEW建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为20180002的学生情况。(10分)
CREATE VIEW v_stu_c AS SELECT sc.Sno,Sname,Cno FROM student, sc WHERE sc.Sno=student.Sno;
SELECT * FROM v_stu_c WHERE sno = '20180002';
2.基于student表、course表和sc表,建立一个名为v_stu_g的视图,视图包括所有选课学生的学号、姓名、课程名称、分数。使用视图v_stu_g查询学号为20180003的学生的课程平均分。(10分)
CREATE VIEW v_stu_g AS SELECT sc.Sno,Sname,Cname,Grade FROM course,student,sc WHERE sc.Sno=student.sno AND sc.Cno=course.Cno;
SELECT AVG(Grade) FROM v_stu_g WHERE Sno = '20180003';
3.使用SQL语句修改视图v_stu_c,显示学生的学号、姓名、性别。(8分)
ALTER VIEW v_stu_c AS SELECT Sno,Sname,Ssex FROM student;
4.利用视图v_stu_c为student表添加一行数据:学号为20180008、姓名为陈婷婷、性别为女。(8分)
INSERT INTO v_stu_c VALUES('20180008','陈婷婷','女');
5.利用视图v_stu_c删除学号为20180008的学生记录。(8分)
DELETE FROM v_stu_g WHERE sno='20180008';
6.利用视图v_stu_g修改姓名为刘晨的学生的数据库系统概论分数为87分。(8分)
UPDATE sc
SET Grade = '87'
WHERE sno = (SELECT Sno FROM student WHERE Sname = '刘晨' LIMIT 1)
AND Cno = (SELECT Cno FROM course WHERE Cname = '数学' LIMIT 1);
7.使用SQL语句删除视图v_stu_c和v_stu_g。(8分)
DROP VIEW v_stu_c;
DROP VIEW v_stu_g;
1. 能否在视图上建立索引。 不能创建索引表,视图本身是一个虚拟的表,它是基于查询语句(SELECT)的结果集
2.创建视图时,with check option参数的含义。
WITH CHECK OPTION
是在创建视图时用来限制通过视图进行数据修改(例如 INSERT
、UPDATE
或 DELETE
)的操作的一种参数。其作用是确保对视图进行的数据操作(修改)符合视图定义的条件。
3.视图的作用。 简化复杂查询:视图可以将复杂的查询逻辑封装成一个虚拟表,用户无需每次都编写复杂的 SQL 语句。通过创建视图,用户只需要简单地查询视图,而不必重复复杂的 JOIN、GROUP BY 等操作。
数据安全性和权限管理:视图可以限制用户访问底层表的特定列或行,从而控制数据访问。通过视图,数据库管理员可以只暴露特定的数据字段,隐藏敏感信息或复杂的业务逻辑。
数据抽象:视图将数据库结构与用户的应用程序逻辑分离,使得应用程序可以以更抽象的方式访问数据,而不需要关心底层表的复杂结构。数据库的结构变化(如表名或字段名的修改)可以通过修改视图来隐藏,从而减少对应用程序的影响。
数据统一和集成:视图可以将来自多个表的数据统一呈现,消除不同数据源之间的差异。例如,基于多个表的数据生成一个视图,用户可以像查询一个单一的表一样,方便地查询这些数据。
提高代码重用性:一旦定义了视图,其他用户和应用程序可以多次使用它,避免了重复编写相同的查询。视图的定义可以帮助在多个地方重用相同的数据逻辑。
便于数据迁移和历史数据管理:视图可以用于跟踪某个时间点的数据快照,或者将实时数据转化为历史数据。对于历史记录和版本管理,视图可以帮助用户查看历史数据的变化,而不直接操作底层表。