定义约束


一、数据库中的约束类型


java insert 唯一约束 update sql定义唯一约束_oracle

非空约束(not null)
唯一性约束(unique)
主键约束(primary key)
外键约束(foreign key)
用户自定义约束(check)

定义约束的原则

1.在创建表的同时,或者在创建表之后都可以定义约束。
2.可以给约束其名字,但约束名不能相同,必须是唯一的。如果没有为约束起名 字,Oracle服务器将用默认格式SYS_Cn产生一个名字,这里的n是一个唯一 的整数,所以约束名是唯一的;


二、定义not null约束


java insert 唯一约束 update sql定义唯一约束_sql_02

创建表时定义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约束


java insert 唯一约束 update sql定义唯一约束_oracle_03

创建表时定义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约束


java insert 唯一约束 update sql定义唯一约束_java_04

创建表时定义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约束(特殊,不支持在后面直接添加定义约束)


java insert 唯一约束 update sql定义唯一约束_sql_05

创建表时定义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约束


java insert 唯一约束 update sql定义唯一约束_自定义_06

创建表时定义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);

七、 禁用与启用约束


查看约束

java insert 唯一约束 update sql定义唯一约束_oracle_07

(以hr用户中的dept50表为例)

查看dept50表下的所有约束类型,约束名字;
Select constraint_name,constraint_type,search_condition from user_constraints 	where lower(table_name) = ‘dept50’;
禁用约束

java insert 唯一约束 update sql定义唯一约束_数据库_08

(以hr用户中的dept50表为例)

禁用dept50下的自定义约束;
	 Alter table dept50 disable constraint dept50_ck;
	级联禁用
	禁用dept60表中的主键约束;
	 Alter table dept60 disable constraint dept60_id_pk cascade;
启用约束

java insert 唯一约束 update sql定义唯一约束_数据库_09

(以hr用户中的dept50表为例)

启用dept50下的自定义约束;
  Alter table dept50 enable constraint dept50_ck;