五种约束

1. 非空约束 not nul

2. 唯一约束 unique

  每一个列上的数据是不允许重复的数据

3. 主键约束 (Primary Key)一般作为数据的唯一的一个标记出现      100%

   主键约束(不为空,且唯一) = 非空约束 + 唯一约束

   复合主键 constraint PK_id_name Primary Key (id,name)  约束的命名方式    复合主键基本不用(开发)

4. 检查约束 check

   constraint ck_sex check (sex in ('男','女',人妖'')),

   constraint ck_age check (age between 0 and 100)

 检查的操作就是对数据的一个过滤

5. 主-外键约束  (核心)   涉及两张表,父子关系,子表中某个字段的取值范围由父表所决定

 constraint fk_id Foreign Key (id) references table (id)

  适用外键的好处是控制了子表中某些数据的取值范围,但同样带来一些问题。

  若主表中有数据对应子表数据,则不能直接删除主表的数据。此时只能先删除子表记录,后才能删除主表记录。

 a. 但这种操作很不方便,所以在建立外键约束的时候,指定一个级联删除的功能,修改数据库创建脚本:

constraint fk_id foreign key (id) references table (id) on delete cascade,此时由于存在级联删除的操作,所以在删除了主表的记录之后,相对应的子表的数据也被同时删除。

b.a的删除方式泰国霸道,因此:

  删除了主表的记录之后,将其所对应的子表的数据置为null,而不是删除。修改数据库的创建脚本。

  constraint fk_id foreign key (id) references table (id) on delete set null

c.删除父表之前必须删除对应的子表,否则无法删除

  但是这样能做很麻烦,因为对于一个未知的数据库,如果按照此类方式进行,则必须先知道其父子关系。

  因此在Oracle中提供了一个强制性删除表的操作,即:不再关心约束。

  在删除的时候 drop table [表名] cascade constraint

  此时不关心子表是否存在。

 

修改约束

1.为表增加约束

 alter table  表名 add constraint 约束名称 约束类型[字段]

2.删除表中的约束

 alter table 表名 drop constraint 约束名称

对于非空约束 无法操作(现在我已知)。

 

查询约束

在Oracle中所有的对象都是保存在数据字典中,约束亦然。

select * from user_constraints;

select * from user_cons_columns;

你可能感兴趣的:(五种约束)