完整性包括实体完整性、域完整性、参考完整性。
一、完整性
完整性包括实体完整性、域完整性、参照完整性等。
1、实体完整性
实体,也就是指行,记录。实体完整体性指保证实体的唯一性。
2、域完整性
域完整性,也叫字段完整性。域完整性保证域的输入值符合字段类型、字段范围等条件
3、参考完整性
即一个字段的值,参考到另一表的字段的值,两字段值保持一致。
二、约束
   约束就是来实现完整性的机制。
1、PRIMARY KEY 约束,主键
PRIMARY KEY 保证实体完整性,PRIMARY KEY也是唯一的聚簇索引(unique clustered index)
2、CHECK约束
CHECK约束来实现域完整性,CHECK保证字段(域)的输入值在某一范围之内。
3、FOREIGN KEY 约束,外键
FOREIGN KEY 来实现参考完整性,典型例子是员工表中有一部门ID字段,这一部门ID值参考到了部门表的部门ID值。
其中员工表中的部门ID表外键,部门表的ID字段一般为主键。这样,便可确保插入到特定表的值在另一个表有匹配值。
外键是需要参照某列值的字段,跟在FOREIGN KEY 后面的字段为外键
4、DEFAULT约束(有没有对应的完整性)
有时候某些列的值,希望有一个默认的值,又不想每次都要输入这个值。这样DEFAULT约束就提供了一个很好的机制,
可以将预先定义的默认值插入到某个列
5、UIQUE 约束(唯一约束)
unique约束也是来保证实体的完整性,保证实体的唯一性,这点与PRIMARY KEY相似。但PRIMARY KEY更严格,
不充许列有NULL值,但unique充许有NULL值。默认是唯一性非聚簇索引(unique nonclustered index)

三、约束的语法
    可以在定义表时创建约束(CREATE TABLE),也可在创建表后使用ALTER TABLE创建约束。
 
 1、PRIMARY KEY约束
 
 (1)创建表时建立PRIMARY KEY约束
 
create table student
( sid smallint not null primary key,
     sname varchar(15),                                    
     ....                    
)

  // 在SID字段建立主建约束,PRIMARY KEY字段指明主键约束,
  // 因为是跟在字段定义之后,已足以定义主键约束在哪个字段字上,
  // 而不会产生岐义
 
 (2)修改表时建立PRIMARY KEY 约束
 
alter table student
add constraint pk_sid primary key clustered(sid)

 
 // ALTER TABLE 指明要建立约束的表,ADD CONSTRAINT指明是增加约束(ADD命令增加字段),
    PK_ID是约束的名字,唯一标识此约束,PRIMARY KEY指明是建立主键约束,clustered(field)指明约
    束是建立在哪个字段之上,CLUSTERED表明主键是聚簇索引
   
 2、CHECK约束
 
 (1)在创建表时指定CHECK约束
 
     create table student
    ( sid smallint not null primary key ,
        sname varchar(15) check (sname = 'msking' or sname= 'ajdan4q'),
        ...
     )

   // CHECK跟在SNAME字段的定义之后,指明了在SNAME字段上建立CHECK约束
      (EXPREESSION)表明字段充许输入值在哪个范围
  
 (2) 在修改表时建立CHECK约束
 
     alter table student
     add constraint ck_student check ( sname = 'msking' or sname = 'ajdan4q')

  // ALTER TBALE 指明要修改的表,ADD CONSTRAINT指明要增加约束(ADD命令增加字段),CK_CHECK
  指明约束的名字,CHECK关键字指明要建立CHECK约束,CHECK表达式的SNAME表明要建立约束的字
 
 3、FOREIGN KEY约束
 
 (1)创建表时指定FOREIGN KEY 约束
 
     create table member (
    id smallint primary key,
     name varchar(15),
    depid smallint references dep(id)    
    )

  //references dep(id)表明参照表DEP的ID列,前面字段定义表时要参照值的字段为depid为外键。
    这也称为列级约束,即跟在列定义后的。
     or
     create table member(
    id smallint primary key ,
     name varchar(15),
    depid small,
     foreign key depid references dep(id)
    )

  此为表级约束,以一逗号开头定义约束,可将约束定义在一列或多列上。此FOREIGN KEY depid指明外键为
  depid,是要参照值的外键,reference dep(id)表明,depid值参照到dep表的ID列的值。DEFAULT、CHECK、
  PRIMARY KEY、UNIQUE约束也可这样定义表级约束。
 
  (2)修改表时新建FOREIGN KEY 约束
     alter table member    
     add constraint fk_depid foreign (depid) key references dep(id)

  
  注:要参照的表及列必须是已存在的,不然会出错。
 
 4、DEFAULT约束
 
 (1)创建表时建立DEFAULT约束
 
create table student
( sid smallint not null primary key,
     sname varchar(15) check(sname = 'msking' or sname = 'ajdan4q'),
     xingbie char(2) default 'nan',
     ..
    )

  
  (2)修改表时建立DEFAULT约束
 
     alter table student
     add constraint df_xingbie default

  
 5、unique 约束
 
 (1)建表时建立unique约束
 
create table student
(sid smallint uique,
..
)

 (2)修改表时建立UNIQUE约束
 
alter table student
add constraint unique_id uique (id)

 
 unique默认建立的是唯一非聚簇索引