完整性包括实体完整性、域完整性、参考完整性。
一、完整性
完整性包括实体完整性、域完整性、参照完整性等。
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 后面的字段为外键
其中员工表中的部门ID表外键,部门表的ID字段一般为主键。这样,便可确保插入到特定表的值在另一个表有匹配值。
外键是需要参照某列值的字段,跟在FOREIGN KEY 后面的字段为外键
4、DEFAULT约束(有没有对应的完整性)
有时候某些列的值,希望有一个默认的值,又不想每次都要输入这个值。这样DEFAULT约束就提供了一个很好的机制,
可以将预先定义的默认值插入到某个列
可以将预先定义的默认值插入到某个列
5、UIQUE 约束(唯一约束)
unique约束也是来保证实体的完整性,保证实体的唯一性,这点与PRIMARY KEY相似。但PRIMARY KEY更严格,
不充许列有NULL值,但unique充许有NULL值。默认是唯一性非聚簇索引(unique nonclustered index)
不充许列有NULL值,但unique充许有NULL值。默认是唯一性非聚簇索引(unique nonclustered index)
三、约束的语法
可以在定义表时创建约束(CREATE TABLE),也可在创建表后使用ALTER TABLE创建约束。
1、PRIMARY KEY约束
(1)创建表时建立PRIMARY KEY约束
// 在SID字段建立主建约束,PRIMARY KEY字段指明主键约束,
// 因为是跟在字段定义之后,已足以定义主键约束在哪个字段字上,
// 而不会产生岐义
(2)修改表时建立PRIMARY KEY 约束
// ALTER TABLE 指明要建立约束的表,ADD CONSTRAINT指明是增加约束(ADD命令增加字段),
PK_ID是约束的名字,唯一标识此约束,PRIMARY KEY指明是建立主键约束,clustered(field)指明约
束是建立在哪个字段之上,CLUSTERED表明主键是聚簇索引
2、CHECK约束
(1)在创建表时指定CHECK约束
// CHECK跟在SNAME字段的定义之后,指明了在SNAME字段上建立CHECK约束
(EXPREESSION)表明字段充许输入值在哪个范围
(2) 在修改表时建立CHECK约束
// ALTER TBALE 指明要修改的表,ADD CONSTRAINT指明要增加约束(ADD命令增加字段),CK_CHECK
指明约束的名字,CHECK关键字指明要建立CHECK约束,CHECK表达式的SNAME表明要建立约束的字
3、FOREIGN KEY约束
(1)创建表时指定FOREIGN KEY 约束
//references dep(id)表明参照表DEP的ID列,前面字段定义表时要参照值的字段为depid为外键。
这也称为列级约束,即跟在列定义后的。
此为表级约束,以一逗号开头定义约束,可将约束定义在一列或多列上。此FOREIGN KEY depid指明外键为
depid,是要参照值的外键,reference dep(id)表明,depid值参照到dep表的ID列的值。DEFAULT、CHECK、
PRIMARY KEY、UNIQUE约束也可这样定义表级约束。
(2)修改表时新建FOREIGN KEY 约束
注:要参照的表及列必须是已存在的,不然会出错。
4、DEFAULT约束
(1)创建表时建立DEFAULT约束
(2)修改表时建立DEFAULT约束
5、unique 约束
(1)建表时建立unique约束
(2)修改表时建立UNIQUE约束
unique默认建立的是唯一非聚簇索引
1、PRIMARY KEY约束
(1)创建表时建立PRIMARY KEY约束
create
table student
( sid smallint not null primary key,
sname varchar(15),
....
)
( 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)
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'),
...
)
( 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')
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)
)
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)
)
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)
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',
..
)
( 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 男
add constraint df_xingbie default 男
5、unique 约束
(1)建表时建立unique约束
create
table student
(sid smallint uique,
..
)
(sid smallint uique,
..
)
(2)修改表时建立UNIQUE约束
alter
table student
add constraint unique_id uique (id)
add constraint unique_id uique (id)
unique默认建立的是唯一非聚簇索引
转载于:https://blog.51cto.com/ajdan4q/329065