### SQL Server 实验知识点解析 — 索引与视图
#### 一、实验目标概述
本实验旨在通过一系列操作加深对SQL Server中索引和视图的理解与应用能力。具体包括以下几个方面:
1. **索引创建**:熟练掌握通过SQL Server图形界面工具以及Transact-SQL语句(`CREATE INDEX`)来创建索引。
2. **索引查看**:学会使用SQL Server图形界面工具和Transact-SQL语句(`sp_helpindex`)来查看索引信息。
3. **索引删除**:熟悉使用SQL Server图形界面工具和Transact-SQL语句(`DROP INDEX`)来删除索引。
4. **索引重命名**:了解如何使用系统存储过程`sp_rename`来重命名索引。
5. **视图创建**:掌握使用SQL Server图形界面工具和Transact-SQL语句(`CREATE VIEW`)创建视图的方法。
6. **视图修改**:学习如何使用Transact-SQL语句(`ALTER VIEW`)来修改已有的视图。
7. **视图删除**:了解使用Transact-SQL语句(`DROP VIEW`)删除视图的基本方法。
#### 二、实验内容详解
##### 1. 创建主键索引
- **SQL Server管理平台**: 打开SQL Server Management Studio (SSMS),选择目标数据库,找到表`student_info`或`curriculum`,右键点击“设计”,在表设计器中选中主键列,设置为主键。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
-- 为student_info表创建主键索引
ALTER TABLE student_info ADD CONSTRAINT PK_student_info PRIMARY KEY (学号);
-- 为curriculum表创建主键索引
ALTER TABLE curriculum ADD CONSTRAINT PK_curriculum PRIMARY KEY (课程编号);
```
##### 2. 创建唯一性索引
- **SQL Server管理平台**: 同上,但需在索引属性中设置唯一性。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
CREATE UNIQUE INDEX idx_unique_course ON curriculum (课程编号);
```
##### 3. 创建非聚集索引
- **SQL Server管理平台**: 与创建主键索引相似,但在属性中选择非聚集类型。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
CREATE NONCLUSTERED INDEX grade_index ON grade (分数);
```
##### 4. 创建复合唯一索引
- **SQL Server管理平台**: 选择多列并设置为唯一索引。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
CREATE UNIQUE INDEX grade_id_c_ind ON grade (学号, 课程编号);
```
##### 5. 查看索引信息
- **SQL Server管理平台**: 在表设计视图中右键表 -> “修改” -> “索引/键”。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
EXEC sp_helpindex @objname = 'grade';
EXEC sp_helpindex @objname = 'student_info';
```
##### 6. 创建聚集索引和唯一索引
- **SQL Server管理平台**: 同创建主键索引,但在属性中选择聚集类型和唯一性。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
CREATE CLUSTERED INDEX idx_grade_clustered ON grade (学号);
CREATE UNIQUE INDEX idx_grade_unique ON grade (课程编号);
```
##### 7. 重命名索引
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
EXEC sp_rename 'grade.grade_index', 'grade_ind', 'INDEX';
```
##### 8. 删除索引
- **SQL Server管理平台**: 在表设计视图中选择索引 -> 右键点击 -> “删除”。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
DROP INDEX grade.grade_ind;
```
##### 9. 创建视图
- **SQL Server管理平台**: 新建查询窗口 -> 输入`CREATE VIEW`语句 -> 执行。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
-- 创建v_stu_i视图
CREATE VIEW v_stu_i AS SELECT 学号, 性别, 家庭住址 FROM student_info;
-- 创建v_stu_c视图
CREATE VIEW v_stu_c AS SELECT 学号, 姓名, 课程编号 FROM student_info JOIN curriculum ON student_info.学号 = curriculum.学生编号 WHERE 学号 = '0003';
```
##### 10. 修改视图
- **SQL Server管理平台**: 编辑视图 -> 修改查询 -> 保存。
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
ALTER VIEW v_stu_c AS SELECT 学号, 姓名, COUNT(*) AS 课程数目 FROM student_info JOIN curriculum ON student_info.学号 = curriculum.学生编号 GROUP BY 学号, 姓名;
```
##### 11. 删除视图
- **Transact-SQL语句**:
```sql
USE studentsdb;
GO
DROP VIEW v_stu_c;
```
通过以上实验内容的操作与实践, 学生们可以深入理解SQL Server中的索引与视图的创建、管理及优化等关键技术, 进一步提升数据库管理和数据处理的能力。
2025-06-03 16:50:55
414KB
1