1.1 实验题目:索引和数据完整性的使用
1.2 实验目的:
(1)掌握SQL Server的资源管理器界面应用;
(2)掌握索引的使用;
(3)掌握数据完整性的使用。
1.3 实验准备
(1)了解SQL Server的索引基本语法;
(2)了解SQL Server的数据完整性。
1.4 实验内容
1.4.1 建立索引
(1)使用CREATE INDEX语句创建索引
①对数据库中的Employees表中的DepartmentID建立索引。
USE Hao
GO
CREATE INDEX depart_ind
ON Employees(DepartmentID)
GO
②在Employees表的Name列和Address列上建立复合索引。
CREATE INDEX Ad_ind
ON Employees(Name, Address)
③对Departments表上的DepartmentName列建立唯一非聚集索引。
CREATE UNIQUE INDEX Dep_ind
ON Departments(DepartmentName)
1.4.2 重建索引
重建表Employees中的所有索引。
USE Hao
GO
ALTER INDEX ALL
ON Employees REBUILD
1.4.3 删除索引
使用DROP INDEX语句删除表Employees表上的多个索引。
DROP INDEX depart_ind ON Employees
1.4.4 完整性
(1)创建一个表Employees5,只含EmployeeID、Name、Sex和Education列。将Name设为主键,作为列Name的约束。对EmployeeID列进行UNIQUE约束,并作为表的约束。
CREATE TABLE Employees5
( EmployeesID char(6) NOT NULL, Name char(10) NOT NULL PRIMARY KEY, Sex tinyint, Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID)
)
(2)删除上例中创建的UNIQUE约束。
ALTER TABLE Employees5
DROP CONSTRAINT UK_id
GO
(3)创建新表student,只考虑“号码”“性别”两列,性别只能包含男或女。
CREATE TABLE student_1
( 号码 char(6) NOT NULL, 性别 char(2) NOT NULL CHECK(性别 IN('男','女'))
)
(4)创建新表Salary2,结构与Salary相同,但Salary2表不允许OutCone列大雨Income列。
CREATE TABLE Salary2
( EmployeeID char(6) NOT NULL, Income float NOT NULL, OutCome float NOT NULL, CHECK(Income>=OutCome)
)
(5)对数据库中的Employees表进行修改,为其增加“DepartmentID”字段的CHECK约束。
USE Hao
GO
ALTER TABLE Employees
ADD CONSTRAINT depart CHECK(DepartmentID>=1 AND DepartmentID<=5)
(6)创建一个规则对象,用以限制输入到该规则所绑定列中的值只能是该规则中列出的值。
CREATE RULE list_rule_1
AS @list IN('财务部','研发部','人力资源部','销售部')
GO
EXEC sp_bindrule'list_rule_1','Departments.DepartmentName'
GO
(7)创建一个表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
)