定义约束
一、数据库中的约束类型
非空约束(not null)
唯一性约束(unique)
主键约束(primary key)
外键约束(foreign key)
用户自定义约束(check)
定义约束的原则
1.在创建表的同时,或者在创建表之后都可以定义约束。
2.可以给约束其名字,但约束名不能相同,必须是唯一的。如果没有为约束起名 字,Oracle服务器将用默认格式SYS_Cn产生一个名字,这里的n是一个唯一 的整数,所以约束名是唯一的;
二、定义not null约束
创建表时定义not null约束;
例
创建表dept80,包括ID,名字,薪水,姓名与薪水列不可以为空,并给薪水的非 空约束自定义一个名字;
Create table dept80(id number,name varchar2(10) not null,salary number constraint dept80_dsn not null );
修改表定义not null约束
(以hr用户中的dept80表为例)
例
向dept80表中添加location_id列;
Alter table dept80 add(location_id number);
修改dept80表中location_id列的约束为非空约束,并为其定义名字;
Alter table dept80 modify(location_id constraint dept80_ln not null);
三、定义unique约束
创建表时定义unique
例
创建表dept90,包括ID,名字,将ID定义唯一约束,并自定义名字;
Create table dept90(id number constraint dept90_iduk unique,name varchar2(20));
修改表定义unique约束;
(以hr用户中的dept90表为例)例
将dept90表中的名字列修改为唯一约束;
Alter table dept90 modify(name unique);
四、定义primary key约束
创建表时定义primary key约束
例
创建dept70表,包括ID,并为ID定义主键约束,以及定义约束名字;
Create table dept70(id number constraint dept70_id_pk primary key);
修改表定义primary key约束
例
创建dept60表,包含ID;
Create table dept60(id number);
将dept60表中的ID列修改为主键约束,并为其自定义名字;
Alter table dept60 modify(id constraint dept60_id_pk primary key);
**创建联合主键**
创建dept50表,包括ID,名字,将为ID与名字列都定义主键约束,并为其自定义 名字;
Create table dept50(id number , name varchar2(20) , constraint dept50_pk primary key(id,name));
五、定义foreign key约束(特殊,不支持在后面直接添加定义约束)
创建表时定义foreign key
例
创建dept40表,包括ID、d_id,为d_id列定义外键约束并自定义名字(参照dept60 表中的ID列);
Create table dept40(id number , d_id number , constraint dept40_fk foreign key(d_id) references dept60(id) );
修改表定义foreign key
例
向dept50表中添加d_id列;
Alter table dept50 add(d_id number);
将dept50中的d_id列定义外键约束(参照dept60表中的ID列),并自定义名字;
Alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);
六、定义check约束
创建表时定义check约束
例
创建dept30表,包括ID、薪水,薪水不能小于1000,并自定义名字;
Create table dept30(id number , salary number(8,2) , constraint dept30_ck check(salary > 1000));
修改表定义check约束
例
向dept50表中添加薪水列;
Alter table dept50 add(salary number(8,2));
修改dept50表中的薪水不能小于1000,并自定义名字;
Alter table dept50 add constraint dept50_ck check(salary > 1000);
七、 禁用与启用约束
查看约束
(以hr用户中的dept50表为例)
例
查看dept50表下的所有约束类型,约束名字;
Select constraint_name,constraint_type,search_condition from user_constraints where lower(table_name) = ‘dept50’;
禁用约束
(以hr用户中的dept50表为例)
例
禁用dept50下的自定义约束;
Alter table dept50 disable constraint dept50_ck;
级联禁用
禁用dept60表中的主键约束;
Alter table dept60 disable constraint dept60_id_pk cascade;
启用约束
(以hr用户中的dept50表为例)
例
启用dept50下的自定义约束;
Alter table dept50 enable constraint dept50_ck;