4
JackLin的博客
首页
分类
标签
生活
时间轴
关于我
友链
搜索
管理员
《数据库原理及应用》课后实验3_索引与视图
数据库
MySQL
发布日期:
2020-05-18 14:06:21
阅读量:
218
所属分类:
数据库设计
前言:这个系列的的文章主要是关于 **《数据库原理及应用》(MySQL版)-清华大学出版社** 的课后实验报告的总结,相当于作为**数据库系统**课程的期末复习吧! ## 实验3_索引与视图 > 实验需要掌握知识点 - 使用 CREATE INDEX 创建索引 - 使用 DROP INDEX 删除索引 - 使用 CREATE VIEW 创建视图 - 使用 ALTER VIEW 修改视图 - 了解删除视图的 SQL 语句 DROP VIEW 的用法 > 具体实验代码 ``` -- 1. 使用SQL语句ALTER TABLE分别删除studentsdb数据库的student_info表、grade表、curriculum表的主键索引。 alter table student_info drop primary key; alter table curriculum drop primary key; alter table grade drop primary key; -- 2. 使用SQL语句为curriculum表的课程编号创建唯一性索引,命名为cno_idx。 create unique index cno_idx on curriculum(c_number); -- 3. 使用SQL语句为grade表的“分数”字段创建一个普通索引,命名为grade_idx。 create index grade_idx on grade(g_score); -- 4. 使用SQL语句为grade表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_sid_cid_idx。 create unique index grade_sid_cid_idx on grade(s_number, c_number); -- 5. 查看grade表上的索引信息。 show index from grade; -- 6. 使用SQL语句删除索引grade_idx。再次查看grade表上的索引信息。 alter table grade drop index grade_idx; show index from grade; -- 7. 使用SQL语句CREATE VIEW建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。 CREATE VIEW v_stu_c AS SELECT s.s_number, s.s_name, g.c_number FROM student_info s, grade g WHERE s.s_number = g.s_number; select * from v_stu_c where s_number = '0003'; -- 8. 基于student_info表、curriculum表和grade表,建立一个名为v_stu_g的视图,视图包括所有学生的学号、姓名、课程名称、分数。使用视图v_stu_g查询学号为0001的学生的课程平均分。 CREATE VIEW v_stu_g AS SELECT s.s_number, s.s_name, c.c_name, g.g_score FROM student_info s, curriculum c, grade g WHERE s.s_number = g.s_number AND g.c_number = c.c_number; SELECT AVG(g_score) AS 'averageScore' FROM v_stu_g WHERE s_number = '0001'; -- 9. 使用SQL语句修改视图v_stu_g,显示学生的学号、姓名、性别。 ALTER VIEW v_stu_g AS SELECT s_number, s_name, s_gender FROM student_info; -- 10.利用视图v_stu_g为student_info表添加一行数据:学号为0010、姓名为陈婷婷、性别为女。 INSERT INTO v_stu_g (s_number, s_name, s_gender) VALUES ('0010', '陈婷婷', '女'); select * from v_stu_g where s_number = '0010'; -- 11.利用视图v_stu_g删除学号为0010的学生记录。 delete from v_stu_g where s_number = '0010'; -- 12.利用视图v_stu_g修改姓名为张青平的学生的高等数学的分数为87。 UPDATE grade SET g_score = 87 WHERE s_number = ( SELECT s_number FROM v_stu_g WHERE s_name = '张青平' ) AND c_number = ( SELECT c_number FROM curriculum WHERE c_name = '高等数学' ); -- 13.使用SQL语句删除视图v_stu_c和v_stu_g。 drop view v_stu_c, v_stu_g; ```