《SQL Server实用教程(第三版)实验六答案.doc》由会员分享,可在线阅读,更多相关《SQL Server实用教程(第三版)实验六答案.doc(5页珍藏版)》请在三一文库上搜索。
1、 200901501116 刘玉佩索引和数据完整性的使用(1) 建立索引1、了解索引的分类情况按索引的组织方式可以分为聚集索引和非聚集索引按索引是否由多列组成可以分为单一索引和复合索引按索引是否唯一可以分为唯一索引和非唯一索引2、使用CREATE INDEX语句能创建主键吗?不能。必须用ALTER TABLE 创建3、在什么情况下可以看到建立索引的好处?在进行查询的时候可以看到建立索引的好处4、使用界面创建一个复合索引5、在Employees表设计窗口选择Address列,右击选择“索引/键”菜单项,在新窗口中为Address列创建一个唯一索引(2) 重建索引重建表Employees中Empl
2、oyeeID列上的索引ALTER INDEX ALLON Employees.EmployeeID REBUILD(3) 删除索引1、使用DROP INDEX一次删除Employees表上的多个索引DROP INDEX Employees.A,Employees.IX_Employees2、使用界面方式删除表Departments上的索引(4) 数据的完整性使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名CREATE TABLE Female(Name char(10), DepartmentName char(20), InCome float, CONSTR
3、AINT X PRIMARY KEY(Name,DepartmentName)2、使用ALTER TABLE语句为表Employees5添加列Address,并为该列定义UNIQUE约束ALTER TABLE Employees5ADD Address varchar(40)CONSTRAINT Y UNIQUE NONCLUSTERED(Address)向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看发生什么情况INSERT INTO studentVALUES(000004,非男)向表中插入数据,查看OutCome值比InCome值大时会发生什么情况INSERT INTO Sa
4、lary2VALUES(000003,1000,2000)创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日CREATE TABLE Employees6(EmplyeeID char(6) NOT NULL, Birthday datetime NOT NULL, CHECK(Birthday1980-1-1)测试CHECK约束的有效性ALTER TABLE EmployeesADD CONSTRAINT depart CHECK(DepartmentID=1 AND DepartmentID=5)INSERT INTO EmployeesV
5、ALUES(000006,小明,本科,1990-7-3,1,8,江汉大学,84911757,7)建立一个规则对象,限制值在0-20之间,然后把它绑定到Employees表的WorkYear字段上CREATE RULE a_ruleAS range like1-20GOEXEC sp_bindrulea_rule,Employees.WorkYearGOCREATE RULE WorkYear_RuleAS Workyear BETWEEN 0 AND 20GOEXEC sp_bindrule WorkYear_Rule,Employees.WorkYear删除上述建立的规则对象EXEC sp_
6、unbindruleEmployees.WorkYearGODROP RULE a_rule创建完Salary3表后,初始化该表的数据与Salary表相同。删除Salary表中一行数据,再查看Salary3表的内容,看看会发生什么情况Salary3表的内容没有变化。使用ALTER TABLE语句向Salary表中的EmployeeID列上添加一个外键,要求当Employees表中要删除或修改与EmployeeID值有关的行时,检查Salary表有没有与该EmployeeID值相关的记录,如果存在则拒绝更新Employees表ALTER TABLE SalaryADD CONSTRAINT sa_foreignFOREIGN KEY(EmployeeID)REFERENCES Employees(EmployeeID)