数据完整性分类

    1. 域完整性

        域完整性又称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。

    2. 实体完整性

        实体完整性也可称为行完整性,要求表中每一行有一个唯一的标识符,即primary key。

    3. 参照完整性

       又称之为引用完整性。


主键和唯一键的主要区别:

(1) 一个数据表只能创建一个主键约束,但可以创建若干个唯一键。

(2)主键字段值不允许为空,而唯一键可以。

相同点:

    两者均不允许表中的对应字段存在重复值,在创建主键和唯一键约束时会自动产生索引。


列级定义:

   列级定义指在定义列的同时定义约束

表级定义:

    指在定义完所有列之后定义约束。


创建表时添加主键:

sql> create table table_name (field_name char(8) primary key);

创建表时添加外键:

sql> create table table_name(field_name char(8) references table_name2(field_name2));

    其中 table_name2是要引用的表名,field_name2是table_name2中对应的主键,且 field_name 与field_name2数据类型必须完全一样。

    如果在建表时忘记添加约束,则可以用alter table命令为表添加约束。但是要注意,增加NOT NULL时用modify选项,增加primary key、unique、foregin key、check时用add选项。

增加NOT NULL:

sql> alter table table_name modify field_name not null;

增加unique:

sql> alter table table_name add constraint constraint_name unique(field_name);

或者:

sql> alter table table_name add unique(field_name);

增加primary key:

sql> alter table table_name add constraint constraint_name primary key(field_name);

或者:

sql> alter table table_name add primary key(key);

增加foreign key:

sql> alter table table_name add constraint constraint_name foreign key (field_name1)
 references table_name2(field_name2);

或者:

sql> alter table table_name add foreign key(field_name1) references 
table_name2(field_name2);

删除约束:

sql> alter table table_name drop constraint constraint_name;

或者:

sql> alter table table_name drop unique(field_name);
sql>alter table table_name drop primary key;


    在删除主键约束时,可能产生错误,这是因为两张表存在主从关系,那么在删除主键约束时,必须加上cascade。

sql> alter table table_name drop primary key cascade;