Primary Key 约束

特点

+被约束字段不可重复,也不包含Null
+一个表只有一个Primary Key
+Oracle会自动为具有Primary Key的字段建立索引,并加Not NULL约束

建立

可以由多个字段组成,那么必须在表级定义

1
2
3
4
5
6
create table Test(
emp_id int,[^1]
dep_id int,
name varchar(20),
constraint PK_ID PRIMARY KEY (emp_id,dep_id);
)

更改

1
2
3
4
5
alter table Test
drop constraint PK_ID;
alter table Test
add constraint PK_ID PRIMARY KEY (emp_id);

Not Null 约束

特点

+被约束的列不能有null
+只能列级定义
+可以有多个not null约束

建立

1
2
3
4
5
create table Test(
emp_id int primary key,
dep_id int,
name varchar(20) constraint emp_name not null,
)

更改

1
2
3
4
5
alter table Test
modify emp_name null
alter table Test
modify name not null

Unique 约束

特点

+被约束的列不能重复
+可以为多个字段定义约束,列级定义和表级定义都可以
+Oracle会自动给该列建立唯一索引
+该列可以有多个null值

建立

1
2
3
4
5
create table Test(
emp_id int primary key,
dep_id int,
phone varchar(11) constraint emp_phone unique,
)

更改

1
2
3
4
5
alter table Test
drop constraint emp_phone;
alter table Test
add constraint emp_phone unique(phone);

Foreign Key 约束

特点

+只能为其它表的列值或者null值
+可以多列组合定义,可以在列级或者表级定义
+可以自我参考,即参考本表中的一列
+与not null 不冲突
+CASCADE关键字,联级删除
+SET NULL关键字,引用列必须支持null值,这样主表数据删除后,子表显示null
+NO ACTION在某些操作过程中可能会违反,不报错,但是结果违反一定报错

建立

1
2
3
4
5
create table Test(
emp_id int primary key,
dep_id int references department,
name varchar(20) ,
)

更改

1
2
3
4
5
6
alter table Test
drop constraint dep_id;
alter table Test
add constraint FK_depid foreign key(dep_id)
references department(id);

Check 约束

特点

+引用一个或多个字段,运算结果必须是布尔值
+可以列级定义,也可以表级定义
+与not null不冲突,可以定义多个Check约束

建立

1
2
3
4
5
6
create table Test(
emp_id int primary key,
dep_id int,
name varchar(20) not null,
emp_age int check (emp_age < 60 and emp_age>20)
)

更改

1
2
3
alter table Test
add constraint chek_age
check(age<100 and age>10)