您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页SQL Server实用教程(第三版)实验6 索引和数据完整性的使用

SQL Server实用教程(第三版)实验6 索引和数据完整性的使用

来源:客趣旅游网
实验6 索引和数据完整性的使用

1.目的与要求

(1)掌握索引的使用方法; (2)掌握数据完整性的实现方法; 2 实验准备

(1)了解索引的作用于分类; (2)掌握索引的创建方法;

(3)理解数据的完整性的概念与分类; (4)掌握各种数据完整性的实现方法。 3.实验内容 (1)建立索引

①使用CREATE INDEX语句创建索引。

对YGGL数据库的Employees表中的DepartmentID列建立索引。 在查询分析器中输入如下程序并执行:

USE YGGL GO

CREATE INDEX depart_ind

ON Employees(DepartmentID) GO

在Employees表的Name列和Address列上建立复合索引。 CREATE INDEX Ad_ind

ON Employees(Name,Address)

对Departments表上的DepartmentName列建立唯一非聚集索引。 CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName) 【思考与练习】

a.索引创建完后在对象资源管理器中查看表中的索引。 b.了解索引的分类情况

c.使用CREATE INDEX语句能创建主题吗?

d.在什么情况下可以看到建立索引的好处? 2使用界面方式创建索引。

使用界面方式在Employees表的PhoneNumber列上创建索引。

启动SQL Server Management Studio,在对象资源管理器中展开数据库YGGL,展开表Employees,右击“索引,选择“新建索引”选项。在新建索引的窗口中填写索引的名称和类型,单击“添加”按钮,在列表框中选择要创建的索引的列,选择完单击“确定”按钮即完成创建工作。 【思考与练习】

a.使用界面方式创建一个复合索引。

b.在Employees表的表设计窗口选择Address列,右击选择“索引/键”菜单项,在新窗口中的Address列创建一个唯一的索引。

c.创建一个数据量很大的新表,查看使用索引和不使用索引的区别。 (2)重建索引。

重建表Employees中的所有索引。

USE YGGL GO

ALTER INDEX ALL ON Employ REBUILD

【思考与练习】重建表Employees中EmployeeID列上的索引。 (3)删除索引。

使用DROP INDEX语句删除表Employees上的索引Depart_ind,计划使用如下SQL语句:

DROP INDEX Depart_ind ON Employees 【思考与练习】

a.使用QROP INDEX一次删除Employees表上的多个索引 b使用界面方式删除Department表上的索引。 (4)数据完整性。

1创建一个表Employees5,只含EmployeesID,Name,Sex和Education列。将Name,设为主键,作为列Name的约束。对EmployeesID列进行UNIQUE约束,并作为表的约束。

CREATE TABLE Employees5 (

EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4),

CONSTRAINT UK_id UNIQUE(EmployeesID) )

2删除上例中创建的UNIQUE约束。

ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO

【思考与练习】

a.使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名。

b.使用语句为表ALTER TABLEEmployees5添加一个新列Address,并为该列定义UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIOQUE约束。 3创建新表student,只考虑“号码”和“性别”两列,性别只能包含男或女。

CREATE TABLE student (号码char(6)NOT NULL 性别char(2) Employees

CHECK(性别 IN(“男”,“女”)) 【思考与练习】

向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看会发生什么情况。

4创建新表Salary2,结构与Salary相同,但Salary2表不可以OutCome列大于Income列。

CREATE TABLE Salary2 (

EmployeesID char(6) NOT NULL Income Float NOT NULL,

OUTCOME FLOAT NOT NULL, CHECK (INCOME>=OUTCOME) )

【思考与练习】

a.向表中插入数据,查看OUTCOME值比INCOME值大是会有什么情况。 b.创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日。。

⑤对YGGL数据库中的Employees表进行修改,为其增加“DepartmentID”字段的CHECK约束。

use YGGL go

alter table Employees

add constraint depart check(DepartmentID>=1 and DepartmentID<=5) 【思考与练习】测试CHECK约束的有效性。

⑥创建一个规则对象,用以输入到该规则所绑定的列中的值只能是该规则中列出的值。

create rule list_rule

as @list in('财务部','研发部','人力资源部','销售部') go

exec sp_bindrule 'list_rule','Departments.DepartmentName' go

【思考与练习】

创建一个规则对象,在0~20之间。然后把他绑定知道Employees表的WorkYear字段上。

删除上述建立的规则对象。

⑦创建一个表Salary3,要求所有Salary3表上EmployeeID列的值都要出现在Salary表中,利用参照完整性约束实现,

要求当删除或修改Salary表上的EmployeeID列时,Salary3表中的EmployeeID值也会随之变化

create table Salary3

(

EmployeeID char(6) not null primary key, InCome float not null, OutCome float(8) not null, foreign key(EmployeeID) references Salary(EmployeeID) on update cascade on delete cascade )

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务