Oracle 约束
约束:ORACLE提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。
完整性约束的基本语法格式:
[constraint constraint_name ] <约束类型>
说明:约束不指定名称时,系统会给定一个名称。
ORACLE中的约束:
主键约束(primary key constraint)
唯一约束(unique constraint)
默认约束(default constraint)
非空约束(not null constraint)
检查约束(check constraint)
外键约束(foreign key constraint)
1、主键约束
primary key 约束用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此保证实体的完整性。表中主键只能有一个,但可以由多个列构成。如:primary key(学号,科目编号)
创建表时设置主键(primary key)约束:
1 create table student ( 2 --第一种: --第二种:stuid number(1), 3 stuid number(1) primary key, --constraint stuid_pk primary_key(stuid) 4 stuname varchar2(20), 5 stuage number(1), 6 stusex number(2) 7 )
修改主键约束:
1 alter table student 2 constraint stuid_pk primary_key(stuid);
2、非空约束和默认约束
not null约束用于确保列不能为null,如果在列上定义not null约束,那么当插入数据时,必须为该列提供数据;当更新列数据时,不能将其值设置为null。
非空约束是列约束。
列级约束:
column [constranint constranint_name] constraint_type
说明:列级约束必须跟在列定义的后面
表级约束:
column,....
column [constranint constranint_name] constraint_type
(column,....)
说明:表级约束不与列一起,而是单独定义的
创建表时设置非空(not null)约束:
1 create table student ( 2 stuid number(20) not null,--两种方式优选第一种 3 stuage number(2) constraint nn_stuage not null 4 );
修改表添加约束的格式对比
修改表添加约束的语法格式:
alter table table_name
add [constraint constraint_name] constranint_type(column);
而添加非空(not null)约束要使用modify语句
alter table table_name
modify(column datatype not null);
删除约束的方式
- 将约束无效化或激活
disable|enable constraint constraint_name
- 将约束彻底结束:
drop constraint constraint _name
- 删除主键约束的格式:
drop primary key
删除非空约束的方式
语法格式:
alter table table_name
modify column_name datatype null;
创建表时设置默认(default)约束:
1 create table student ( 2 stuid number(20) not null default 1,--当系统未赋值,默认赋1。 3 4 );
3、唯一约束
唯一约束用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值。
注意:
-
-
- 使用唯一性约束的列允许为空值;
- 一个表中可以允许有多个唯一性约束;
- 可以把唯一性约束定义在多个列上;
-
创建表时设置唯一(unique)约束:
1 create table tstudent ( 2 stuid number(1) primary key, 3 stuname varchar2(20), 4 stuage number(1), 5 stusex number(2), 6 email varchar(50) unique, --第一种列级约束 7 cardid varchar2(18), 8 constraint uk_cardid unique(cardid) --第二种表级约束,用户自定义添加 9 );
修改表时添加唯一性约束
alter table student add constraint uk_cardid unique(cardid);
禁用约束
alter table student disable constraint uk_cardid unique(cardid);
彻底删除
alter table student drop constraint uk_cardid;
4、检查约束
检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。
创建表时设置检查(check)约束:
1 create table student ( 2 stuid number(1) primary key, 3 stuname varchar2(20), 4 stuage number(1), 5 stusex char(2) check(stusex='男' or stusex='女'), --第一种列级约束 6 email varchar2(50) 7 constraint ck_stusex check(stusex='男' or stusex='女') --第二种表级约束 8 );
修改表时添加检查约束
alter table student add constraint ck_stusex check(stusex='男' or stusex='女');
禁用约束
alter table student disable constraint ck_stusex;
彻底删除
alter table student drop constraint ck_stusex;
5、外键约束
外键(foreign key)适用于建立和加强两个表数据之间的连接的一列或多列。外键约束是唯一设计两个表关系的约束。
- 列级约束
creat table 从表
(column_name datatype references
主表(column_name)[on delete cascade],..);
说明:[on delete cascade]可选项,代表级联删除,删除与之相关的元素。
- 表级约束
constraint constraint_name foreign key (column_name)
references 主表(column_name)
[on delete cascade]
创建时设置外键(foreign key)约束:
主表:
1 create table department( 2 depid varchar2(10) primary key, 3 depname varchar2(30) 4 );
从表1:
create table student( sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), depid varchar2(10) references department(depid) --第一种 );
从表2:
1 create table student( 2 sid number(8,0), 3 name varchar2(20), 4 sex char(2), 5 birthday date, 6 address varchar2(50), 7 depid varchar2(10), 8 constraint fk_depid foreign key(depid) --第二种 9 references department(depid) 10 on delete cascade 11 );
创建完成后:
注意:
-
-
- 设置外键约束时主表的字段必须是主键列(或唯一列)
- 主从表中相应字段必须是同一数据类型
- 从表中外键字段的值必须来自表中的相应字段的值,或者为null值
-
修改表时添加外键约束:
alter table student
add constraint fk_depid foreign key(depid)
references department(depid)
on delete cascade;
禁用约束:
alter table student disable constraint fk_depid;
彻底删除:
alte table student drop constraint fk_depid;