索引和视图

索引和视图

一、实验目的

  1. 学会使用SQL语句CREATE INDEX创建索引。
  2. 学会使用SQL语句DROP INDEX删除索引。
  3. 学会使用SQL语句CREATE VIEW创建视图的用法。
  4. 掌握使用SQL语句ALTER VIEW修改视图的方法。
  5. 了解删除视图的SQL语句DROP VIEW的用法。
    二、实验内容
  6. SQL语句CREATE INDEX创建索引。
  7. SQL语句DROP INDEX删除索引。
  8. SQL语句CREATE VIEW创建视图的用法。
  9. SQL语句ALTER VIEW修改视图的方法。
  10. SQL语句DROP VIEW的用法。
    三、实验步骤
  11. 使用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’;
索引和视图_第1张图片

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;
索引和视图_第2张图片

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’;
索引和视图_第3张图片

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;
四、实验思考

  1. 建立索引的目的。什么情况下不适于在表上建立索引。
    通过唯一性索引(unique)可确保数据的唯一性;
    加快数据的检索速度;
    加快表之间的连接;
    减少分组和排序时间;
    使用优化隐藏器提高系统性能。
    对于在查询过程中很少使用或参考的列,不应该创建索引。
    对于那些只有很少数据值的列,不应该创建索引。
    对于那些定义为image,text和bit数据类型的列,不应该创建索引。
    当修改性能远大于检索性能,不应该建立索引。
  2. 能否在视图上建立索引。
    不可以,视图是不可以创建索引。索引是要占用存储空间的,也只能创建在占有存储空间的对象上。永久表和临时表都是占用存储空间,所以可以创建索引。而视图是select语句的结果集,是放在内存中的数据,所以不能在视图上创建索引。
    3.想通过视图修改表中数据,视图应具备哪些条件。
    是简单表或者是一对一的表
    不能带聚合函数
    没有with read only
    4.视图的作用是什么?
    1.数据库视图隐藏了数据的复杂性。
  3. 数据库视图有利于控制用户对表中某些列的访问。
  4. 数据库视图使用户查询变得简单。
    五、实验总结
    1、收获
    通过本次实验,我掌握了索引、统计信息和视图等数据对象的基本概念,并且熟悉了各种基本操作。
    2、存在的问题
    对语句不熟悉,有些问题并不能及时发现。
    在视图和索引的应用不能很好的区分VIEW和INDEX关键字。

你可能感兴趣的:(数据库,sql)