数据库完整性约束概念:
数据库的完整性是指数据的正确性,有效性,相容性,防止错误的数据进入数据库.
数据完整性主要有四类:实体完整性,域完整性,参照完整性(引用完整性),用户定义完整性.
实体完整性:实体完整性将行定义为特定表的唯一实体.
主键 primary key 约束
主要特征:
1 创建Primary key约束时,SQL server会自动创建一个唯一的集聚索引.
2 定义了Primary key约束的字段的取值不能重复,并且不能取null值.
3 每个表只能定义一个Primary key约束.
4 如果表中已经有了集聚索引,那么在创建Primary key约束之前,要么指定所创建的是非集聚索引,要么删除集聚索引.
例:
create table ebuy.dbo.memory
(
catid int primary key, ------字段catid为int型,并且为主键
cuspassword varchar(6)not null,
cusname varchar(20)not null,
cussex varchar(1)not null,
email varchar (30)not null,
telephoneno varchar (12)not null,
address varchar(80)not null,
postid varchar(6)not null,
passcardno varchar(20)not null,
)
或
create table ebuy.dbo.memory
(
catid varchar(8)not null, ------字段catid为ivarchar型
cuspassword varchar(6)not null,
cusname varchar(20)not null,
cussex varchar(1)not null,
email varchar (30)not null,
telephoneno varchar (12)not null,
address varchar(80)not null,
postid varchar(6)not null,
passcardno varchar(20)not null,
Primary key (cusid) ------设cusid为主键
)
唯一 unique 约束
主要特征:
1 一个表可以有多个unique约束.
2 在一个表中不容许任意两处在被约束的字段上有相同的null值,最好把被定议了unique的字段定义为not null.
例:
create table ebuy.dbo.memory
(
catid varchar(8)not null,
cuspassword varchar(6)not null,
cusname varchar(20)not null unique, ------设字段cusname为unique
cussex varchar(1)not null,
email varchar (30)not null,
telephoneno varchar (12)not null,
address varchar(80)not null,
postid varchar(6)not null,
passcardno varchar(20)not null,
)
标识 identity (自增长列)
例:
create table ebuy.dbo.memory
(
catid varchar(8)not null identity(5,5), ------设字段catid为identity其中catidp 字段从一行5.第二行为10,第三行为15(其数据什是数据库自动填入的)如果identity()不填,默认为(1,1)
cuspassword varchar(6)not null,
cusname varchar(20)not null
cussex varchar(1)not null,
)
域完整性:为域指定数据类型就是给实体属性指定数据类型或数据库表字段指定数据类型.
条件 check (域完整行约束)
主要特征:
1 限制了向特定字段列输入数据的类型和取值范围
2 表级定义的check约束可以对多个字段列进行检查
例:
create table ebuy.dbo.memory
(
catid varchar(8)not null,
cuspassword varchar(6)not null,
cusname varchar(20)not null ,
Amount int not null check(Amount<100), ) ------设字段cusname为check,如果在Amount列里输入的数据大于100则会报错,只能输入小于100的整型.
非空 not null (域完整行约束)
非空约束是指表中的列值不能为空(null),空值null是不知道的,不确定的或无法填入的值.null值不能理解为0,空格,空白.
例:
create table ebuy.dbo.memory
(
catid varchar(8)not null, ------设字段catid不能为空,如果设为null就表示可以不填.
)
默认值 default (域完整行约束)
缺省约束也称为默认约束或default约束,可以在创建表时创建,也可以使用数据库对象默认创建.在输入数据时,如果该字段没有输入值,则有default约束提供默认数据.
主要特征:
1 每个字段只能有一个default约束,即如果列上已经有一个默认约束,就不能在该列上在创建一个默认约束.
2 default约束不能放在identity字段上或者timestamp字段上,因为这两种字段都能自动插入数据.
3 作为默认的值必须对于该列上的检查约束来说是有效的,即在检查约束的指定范围之内.
例:
create table ebuy.dbo.memory
(
catid varchar(8)not null,
cuspassword varchar(6) default '88888' not null, ------设该字段在不输入时,数据提交成功后,发现没有输入字段的值变成为"88888".
cusname varchar(20)not null ,
)
或:
alter table ebuy.dbo.orders add default 100 for amount ------修改数据库ebuy下的orders表里的amount字段的值默认为100.
外键约束 forerign key 参照完整性
外键约束是指一个表(或从表)的一个列或列组合,它的取值必须参照另一个表的主键或唯一性键值.外键的值要么为空(NULL),要么是引用表的某个主键或唯一性键值.
主要特征:
1 一旦foreign key定义了某个字段,则该字段的取值必须参照同一表或另一表中的primary key约束或者unique约束.
2 foreign key 约束不能自动建立索引.
向表中增加一个外键约束:
alter table distributors add constraint distfk foreign key (address) references addresses(address)match full