索引和视图
一、实验目的
- 学会使用SQL语句CREATE INDEX创建索引。
- 学会使用SQL语句DROP INDEX删除索引。
- 学会使用SQL语句CREATE VIEW创建视图的用法。
- 掌握使用SQL语句ALTER VIEW修改视图的方法。
- 了解删除视图的SQL语句DROP VIEW的用法。
二、实验内容 - SQL语句CREATE INDEX创建索引。
- SQL语句DROP INDEX删除索引。
- SQL语句CREATE VIEW创建视图的用法。
- SQL语句ALTER VIEW修改视图的方法。
- SQL语句DROP VIEW的用法。
三、实验步骤 - 使用SQL语句ALTER TABLE分别删除studentsdb数据库的student_info表、grade表、curriculum表的主键索引。
ALTER TABLE student_info DROP PRIMARY KEY;
ALTER TABLE grade DROP PRIMARY KEY;
ALTER TABLE curriculum DROP PRIMARY KRY;
2.使用SQL语句为curriculum表的课程编号创建唯一性索引,命名为cno_idx。
CREATE UNIQUE INDEX cno_idx
ON curriculum(课程编号);
3.使用SQL语句为grade表的“分数”字段创建一个普通索引,命名为grade_idx。
CREATE INDEX grade_idx
ON grade(分数);
4.使用SQL语句为grade表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_idx_cid_idx。
CREATE INDEX grade_idx_cid_idx
ON grade(学号,课程编号);
5.查看grade表上的索引信息。
SHOW INDEX FROM grade;
6.使用SQL语句删除索引grade_idx。再次查看grade表上的索引信息。
DROP INDEX GRADE_IDX ON grade;
SHOW INDEX FROM GRADE;
7.使用SQL语句CREATE VIEW建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。
CREATE VIEW v_stu_c AS
SELECT s.学号,姓名,课程编号 FROM student_info s,grade g
WHERE s.学号=g.学号;
SELECT * FROM v_stu WHERE 学号=‘0003’;
8.基于student_info表、curriculum表和grade表,建立一个名为v_stu_g的视图,视图包括所有学生的学号、姓名、课程名称、分数。使用视图v_stu_g查询学号为0001的学生的课程平均分。
CREATE VIEW v_stu_g AS
SELECT s.学号,s.姓名, c.课程名称,g.分数
FROM student_info s,curriculum c,grade g
WHERE s.学号=g.学号 AND g.课程编号=c.课程编号;
SELECT AVG(分数) FROM v_stu_g
WHERE 学号=‘0001’;
9.使用SQL语句修改视图v_stu_g,显示学生的学号、姓名、性别。
ALTER VIEW v_stu_g AS
SELECT 学号,姓名,性别 FROM student_info;
10.利用视图v_stu_g为student_info表添加一行数据:学号为0010、姓名为陈婷婷、性别为女。
INSERT INTO v_stu_g VALUES(‘0010’,‘陈婷婷’,‘女’);
11.利用视图v_stu_g删除学号为0010的学生记录。
DELETE FROM v_stu_g WHERE 学号=‘0010’;
12.利用视图v_stu_g修改姓名为张青平的学生的高等数学的分数为87。
CREATE OR REPLACE VIEW v_stu_g AS
SELECT s.学号,s.姓名, c.课程名称 ,g.分数
FROM student_info s,curriculum c,grade g
WHERE s.学号=g.学号 AND g.课程编号=c.课程编号;
UPDATE v_stu_g
SET 分数=87
WHERE 姓名=‘张青平’ AND 课程名称=‘高等数学’;
13.使用SQL语句删除视图v_stu_c和v_stu_g。
DROP VIEW v_stu_c,v_stu_g;
四、实验思考
- 建立索引的目的。什么情况下不适于在表上建立索引。
通过唯一性索引(unique)可确保数据的唯一性;
加快数据的检索速度;
加快表之间的连接;
减少分组和排序时间;
使用优化隐藏器提高系统性能。
对于在查询过程中很少使用或参考的列,不应该创建索引。
对于那些只有很少数据值的列,不应该创建索引。
对于那些定义为image,text和bit数据类型的列,不应该创建索引。
当修改性能远大于检索性能,不应该建立索引。 - 能否在视图上建立索引。
不可以,视图是不可以创建索引。索引是要占用存储空间的,也只能创建在占有存储空间的对象上。永久表和临时表都是占用存储空间,所以可以创建索引。而视图是select语句的结果集,是放在内存中的数据,所以不能在视图上创建索引。
3.想通过视图修改表中数据,视图应具备哪些条件。
是简单表或者是一对一的表
不能带聚合函数
没有with read only
4.视图的作用是什么?
1.数据库视图隐藏了数据的复杂性。 - 数据库视图有利于控制用户对表中某些列的访问。
- 数据库视图使用户查询变得简单。
五、实验总结
1、收获
通过本次实验,我掌握了索引、统计信息和视图等数据对象的基本概念,并且熟悉了各种基本操作。
2、存在的问题
对语句不熟悉,有些问题并不能及时发现。
在视图和索引的应用不能很好的区分VIEW和INDEX关键字。