索引与数据完整性

--1.创建索引。为表KCB的‘课程名’列创建索引

CREATE INDEX kc_name_ind

   ON KCB(课程名)

  

--2.创建唯一索引,因为指定了CLUSTERED,索引该索引将对磁盘上的数据进行物理排序。

CREATE UNIQUE CLUSTERED INDEX kc_name_ind

   ON KCB(课程名)

--3.复合索引

CREATE INDEX cjb_ind

   ON CJB(学号,课程号)

   WITH(DROP_EXISTING= 0N)

--4.根据表xsb中的总学分列创建索引,列中用到了FILLFACTOR子句

CREATE NONCLUSTERED INDEX score_ind

   ON XSB(总学分)

   WITH FILLACTOR = 60

--5.根据表XSB中'学号'列创建唯一聚集索引。如果输入了重复的键,将忽略该INSERT或UPDATE语句

REATE UNIQUE CLUSTERED INDEX xs_ind

   ON XSB(学号)

   WITH IGNORE_DUP_KEY

--重建索引,重建表KCB上索引索引

ALTER INDEX ALL ON KCB REBULLD

--重建表KCB上的kc_name_ind索引

ALTER INDEX kc_name_ind ON KCB REBULLD

--索引的删除。删除PXSCJ数据库中KCB的一个索引名为kc_name_ind的索引

IF EXISTS (SELECT name FROM sysindexes WHERE name='kc_name_ind')

   DROP INDEX KCB.kc_name_ind

数据完整性

--6.创建表,并对‘学号’字段创建PRIMARY KEY约束,对‘姓名’字段定义UNIQUE约束

CREATE TABLE XSB

{

   学号     char(6)    NOT NULL CONSTRAINT XH_PK PRIMARY KEY,

   姓名     char(8)    NOT NULL CONSTRAINT XH_UK,

   性别     bit        NOT NULL DEFAULT 1,

   出生时间  date    NOT NULL,

   专业     char(12) NULL,

   总学分    int        NULL,

   备注     varchar(500) NULL

}--当表中的主键为复合主键,只能定义为一个表的约束

--7.修改表上,向其中添加一个‘身份证号码’字段,对该字段定义UNIQUE约束。对‘出生时间’字段定义UNIQUE

CREATE TABLE XSB1

   ADD 身份证号码 char(20)

   CONSTRAINT SF_UK UNIQUE NONCLUSTERED (身份证号码)

   GO

   ALTER TABLE XSB1

      ADD CONSTRAINT CJSJ_UK UNIQUE NONCLUSTERED (出生时间)

--8.删除PRIMARY KEY约束和UNIQUE约束

ALTER TABLE XSB1

   DROP CONSTRAINT XH_PK,XM_UK

域完整性的实现

--9.创建一个表student1,只考虑‘学号’和‘出生日期’两列,出生日期必须大于年月日,并命名为CHECK约束

CREATE TABLE student1

{

   学号 char(6) NOT NULL,

   出生时间 datetime NOT NULL,

   CONSTRAINT DF_student1_cjsj CHECK(出生时间>'1980-01-01')

}

--10.创建一个表student2,有‘学号’,‘最好成绩’和‘平均成绩’列,要求最好成绩必须大于平均成绩

CREATE TABLE student2

{

   学号 char(6) NOT NULL,

   最好成绩 INT NOT NULL,

   平均成绩 INT NOT NULL,

   CHECK(最好成绩>平均成绩)

}

--11.删除CJB'成绩'字段的CHECK约束

ALTER TABLE CJB

   DROP CONSTRAINT cj_constraint

--12.规则对象.下面的程序创建一个规则,并绑定到表KCB的课程号列,用于限制课程号的输入范围

CREATE RULE kc_rule

   AS @range like '[1-5][0-9][0-9]'

   GO

   EXEC sp_bindrule 'kc_rule','KCB.课程号'

   GO

--13.解除绑定和删除绑定

EXEC sp_unbindrule 'kc_rule','KCB.课程号'

DROP RULE kc_rule

参照完整性的实现

--14. 假设KCB为主表,KCB的‘课程号’字段已经定义为主键,CJB为从表

--如下示例用于将CJB的‘课程号’字段定义为外键

ALTER TABLE CJB

   ADD CONSTRAINT kc_foreign

      FOREIGN KEY (课程号)

      REFERENCES KCB (课程号)

--15.删除标间的参照关系

ALTER TABLE CJB

   DROP CONTRAINT kc_foreign

posted @ 2015-12-24 16:56  tt香薷  阅读(573)  评论(0)    收藏  举报