oracle的约束主要作用是进行表面数据校验,保证数据的完整性。
主要有以下五类约束:
not null (非空)
unique(唯一键)
primary key (主键)
foreign key (外键)
check (检查)
注意:约束可以用在表级或列级
1.建表的时候就建立约束
主键约束(primary key):非空,唯一
create table mytest( id number(11) primary key,--指明主键约束 name varchar2(10), age number(3) ); <pre name="code" class="sql">create table mytest( id number(11) primary key, name varchar2(10), age number(3), constraint my_id primary key(id)--指明主键约束 ); <pre name="code" class="sql"><pre name="code" class="sql">create table mytest( id number(11) primary key, name varchar2(10), age number(3), constraint my_id primary key(id,name)--创建联合主键 );
create table mytest( id number(11) primary key,--指明主键约束 name varchar2(10) not null,--非空约束,不能插入非空数据 age number(3) );
唯一约束用于保证数据不重复;
唯一约束可以为空;
唯一约束创建唯一索引;
唯一约束可以在表级,也可以在字段级;
create table mytest1( id number(11) unique,--创建唯一约束 name varchar2(10) not null, age number(3) ); create table mytest2( id number(11), name varchar2(10) not null, age number(3), constraint my_id unique(id)--创建唯一约束 );外键约束(foreign key):
明确指明两表之间字段的关联参考关系;
外键参考的字段必须为另一个表的主键,或唯一键;
create table empinfo( eid number(3) primary key, ename varchar2(20), job varchar2(20), birth date ); create table salary( eid number(3), basic_salary number(8,2), job_allowance number(8,2), travelling_allowance number(8,2), personal_income_tax number(8,2), constraint salary_eid_fk foreign key(eid) references empinfo(eid) );
检查约束(check):
字段级定义;每次插入值时必须满足检查表达式;
create table mytest( id number(3) primary key, name varchar2(20), age number(3) check(age >0 and age <=130)--检查约束,年龄大于0小于等于130 );
2.建表后添加约束
以上讨论的是建表的时候就把约束添加完成,但是,有时我们想修改,变动约束,就需要在建立后做手脚。
create table mytest( id number(3), name varchar2(20), age number(3) ); --添加约束 alter table mytest add constraint my_pk_id primary key(id); --禁用约束 alter table mytest disable constraint my_pk_id; --启用约束 alter table mytest enable constraint my_pk_id; --删除约束 alter table mytest drop constraint my_pk_id; --修改约束 alter table mytest modify name varchar2(20) not null;