Oracle约束
约束的作用
- 定义规则
- 确保完整性
非空约束
- 在创建表时设置非空约束
create table table_name(
column_name datatype not null,...
)
- 在修改表时添加非空约束
alter table table_name
modify column_name datatype not null;
- 在修改表时去除非空约束
alter table table_name
modify column_name datatype null;
主键约束
- 作用:确保表当中的每一行数据的唯一性,主键约束具有
非空和唯一性
- 一张表只能设计一个主键约束
- 主键约束可以由多个字段构成(联合主键或复合主键)
- 在创建表时设置主键约束
create table table_name(
column_name datatype primary key,...
)
-- 联合主键
constraint constraint_name primaty key(column_name1,...)
-- 举个列子1
create table userInfo(
id number(6,0) primary key,
username varchar2(20)
)
-- 举个例子2
create table userInfo(
id number(6,0),
username varchar2(20),
constraint pk_userInfo_id primary key(id)
)
- 在修改表时添加主键约束
-- 语法
alter table table_name
add constraint constraint_name
primary key(column1,...);
-- 举个例子
alter table userInfo
add constraint pk_userInfo_id
primary key(id);
- 更改约束的名称
-- 语法
alter table table_name
rename constraint old_constraint_name to new_constraint_name
- 删除主键约束
-- 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
-- 删除指定约束
alter table table_name
drop constraint constraint_name
-- 删除主键约束 [cascade]级联删除外键关系
alter table table_name
drop primary key [cascade]
外键约束
- 在创建表时设置外键约束
-- table_name 从表,table2_name 主表
-- 设置外键约束时,主表的字段必须是主键
-- 主从表中相应的字段必须是同一个数据类型
-- 从表中外键字段的值必须来自主表中的相应字段的值,或者为null值
create table table_name(
column_name datatype references table2_name(column_name,
...
);
-- 举个列子
create table typeInfo(
id number(6),
typeName varchar2(20),
constraint pk_typeInfo_id primary key(id)
);
create table userInfo(
id number(6,0) primary key,
username varchar2(20),
type_id number(6) references typeInfo(id)
)
-- 第二种
constraint constraint_name foreign key(column_name) references table_main_name(column_name) [on delete cascade];
-- 举个例子2
create table userInfo(
id number(6,0) primary key,
username varchar2(20),
type_id number(6),
constraint fk_typeInfo_userInfo_type_id foreign key(type_id) references typeInfo(id)
)
- 在修改表时添加外键约束
-- table_name 指的是从表
alter table table_name
add constraint constraint_name foreign key(column_name) references table_main_name(column_name) [on delete cascade];
-- 举个例子
alter table userInfo
add constraint fk_typeInfo_userInfo_type_id foreign key(type_id) references typeInfo(id) [on delete cascade];
- 删除外键约束
-- 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
-- 删除指定约束
alter table table_name
drop constraint constraint_name
唯一约束
- 作用:保证字段值的唯一性
唯一约束和主键约束的区别:
- 主键字段值必须是非空的
- 唯一约束允许有一个空值
- 主键在每一张表中只能有一个
- 唯一约束在每张表中可以有多个
在创建表时设置唯一约束
create table table_name(
column_name datatype unique,
...
);
constraint constraint_name unique(column_name);
- 在修改表时添加唯一约束
-- 语法
alter table table_name
add constraint constraint_name
unique(column1,...);
- 删除唯一约束
-- 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
-- 删除指定约束
alter table table_name
drop constraint constraint_name
检查约束
- 在创建表时设置检查约束
create table table_name(
column_name datatype check(expressions),
...
);
-- 举个例子
create table userInfo(
id number(6,0) primary key,
username varchar2(20),
salary number(5,2) check(salary>0)
);
-- 第二种
constraint constraint_name check(expressions);
- 在修改表时添加检查约束
-- 语法
alter table table_name
add constraint constraint_name
check(expressions);
- 删除检查约束
-- 禁用指定的约束
alter table table_name
disable | enable constraint constraint_name
-- 删除指定约束
alter table table_name
drop constraint constraint_name
如何查找创建的约束?
-- 查询数据字典 用户的约束
desc user_constraints;
-- 查找表的约束名称及其状态
select constraint_name,status from user_constraints where table_name='USERINFO'