Oracle约束
约束的概念:
- Oracle数据库使用约束(constraints)来防止无效的数据进入到表中,保护数据的实体完整性
- 通过约束,强制用户在插入、更新或删除数据时必须遵循一定的规则
- 约束可以在创建表的时候定义,也可以在表创建之后定义
- 不显式命名约束,Oracle数据库将用格式SYS_Cn产生一个名字,这里n 是一个唯一的整数,所以约束名是唯一的
主要约束
Not null 非空约束:指定字段不能包含空值。
Unique 唯一约束:指定字段的值(或字段组合的值)对于表中所有的值必须是唯一的,唯一键约束允许输入空值,且包含空值的行可以是任意数目,因为空不等于任何值。
PRIMARY KEY 主键约束:每个表只能创建一个主键,主键是表的每一行的唯一性标识,该约束强制字段或字段组合的唯一性,并且确保作为主键的字段不能包含空值,对于一个主键字段,UNIQUE索引被自动创建。
FOREIGN KEY 外键约束: 指明一个字段或者字段的组合作为一个外键,这个外键和另一个表的主键(或唯一键)建立起一个关系。
一个外键值必须匹配一个在父表中存在的值,所以在子表中,不能在外键字段中输入一个没有引用的值;同时在父表中,不能删除这样的行,因为该行的主键正被子表所引用
CHECK 检查约束:是一种灵活的约束,定义每行都必须满足的条件一个字段可以定义多个CHECK约束
CHECK (字段 BETWEEN 100 and 9999)
CHECK (字段 in(‘男’,‘女’) )
check(字段 >= 30)
约束可以在两个级别上定义,分别是字段级别约束和表级别约束,其中字段级别约束只涉及一个单个的字段,能够定义完整性约束的任何类型;而表级别约束涉及一个或多个字段,不能定义NOT NULL这个约束
字段级别约束
语法
create table 表名(
字段1 primary key,
字段2 not null,
字段3 unique,
字段4 check(字段4 in('男','女')),
字段5 references 主表(字段)
)
实例
create table temp_it(
eid varchar2(32) primary key,
ename varchar2(32) not null,
sex varchar2(2) check(sex in ('男','女')),
idcard varchar2(18) unique,
deptno number(2) references dept(deptno)
)
表级别约束
语法
create table 表名(
字段1 ,
字段2 not null,--非空约束只能设置在字段上
字段3 ,
字段4 ,
字段5 ,
constraint 约束名 primary key(字段1,字段2),
constraint 约束名 unique(字段2,字段3),
constraint 约束名 check(字段4 in('男','女')),
constraint 约束名 foreign key(字段4,字段5) references 主表(字段1,字段2) ,
)
--外键指向主表的主键或者唯一键
注意 1.非空约束只能设置在字段上
2.外键指向主表的主键或者唯一键
3.当多字段共同组成主键时,必须使用表级别约束
实例
create table temp_it(
eid varchar2(32),
ename varchar2(32) not null,
sex varchar2(2) ,
idcard varchar2(18) ,
deptno number(2),
constraint eid_pk primary key(eid),
constraint sex_ck check(sex in('男','女')),
constraint idcard_uq unique(idcard),
constraint deptno_fk foreign key(deptno) references dept(deptno)
)
添加约束:表已建好
语法
ALTER TABLE 表名
ADD constraint 约束名 primary key(字段1,字段2)或
constraint 约束名 unique(字段2,字段3)或
constraint 约束名 check(字段4 in('男','女'))或
constraint 约束名 foreign key(字段4,字段5) references 主表(字段1,字段2)
同表级别约束,创建约束时一样。
删除约束:表已建好
语法
ALTER TABLE 表名
DROP PRIMARY KEY | UNIQUE(column) | CONSTRAINT 约束名 [CASCADE]
CASCADE选项导致任何与其相依赖的约束也被删除
例:删除一个主键,如果有字表的外键依赖该主键,那外键也会一并删除