文章目录
约束的作用:
1、定义规则
2、确保完整性(强调数据的精确性和可靠性)
一、非空约束
1、在创建表时设置非空约束
create table Sys_User_1
(
userID number(6,0),
username varchar2(20) not null,
userpwd varchar2(20) not null
);
2、在修改表时添加非空约束
alter table sys_user
modify username varchar2(20) not null;
3、在修改表时去除非空约束
alter table sys_user
modify username varchar2(20) null;
二、主键约束
作用:确保表当中每一行数据的唯一性
- 一张表只能设计一个主键约束
- 主键约束可以由多个字段构成(联合主键或复合主键)
1、在创建表时设置主键约束
(1)不设约束名称
create table Sys_User_P
(
userID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20)
);
(2)设置主键约束时设置约束名称
create table Sys_User_P1
(
userID number(6,0),
username varchar2(20),
userpwd varchar2(20),
constraint pk_id_username primary key(userID,username)
);
2、查询约束名称
desc user_constraints;
select constraint_name from user_constraints
where table_name = 'SYS_USER_P1';
3、在修改表时添加主键约束
alter table sys_user
add constraint pk_userid primary key(userID);
4、更改约束的名称
alter table sys_user
rename constraint pk_userid to new_pk_userid;
查询约束
select constraint_name from user_constraints
where table_name = 'SYS_USER';
5、禁用主键约束
alter table sys_user
disable constraint new_pk_userid;
6、删除主键约束
(1)主键约束有名字
alter table sys_user
drop constraint new_pk_userid;
(2)主键约束没有名字:
alter table sys_user_p
drop primary key;
三、外键约束
1、在创建表时设置外键约束
create table Sys_User_type
(
typeID varchar2(10) primary key,
typename varchar2(20)
);
create table Sys_User_F
(
UserID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20),
typeID_new varchar2(10) references Sys_User_type(typeID)
);
insert into sys_user_type values(1,'测试类型');
insert into sys_user_f(userID,username,typeID_new) values(1,'小明',2);
insert into sys_user_f(userID,username,typeID_new) values(1,'小乐',1);
insert into sys_user_f(userID,username,typeID_new) values(1,'小乐',null);
insert into sys_user_f(userID,username,typeID_new) values(2,'小乐',null);
设置级联删除,当主键的字段被删除时,外键所对应的字段也被删除:
create table Sys_User_F2
(
UserID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20),
typeID_new varchar2(10),
constraint fk_typeid_new foreign key(typeID_new) references Sys_User_type(typeID) on delete cascade
);
2、在修改表时添加外键约束
create table Sys_User_F3
(
UserID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20),
typeID_new varchar2(10)
);
alter table sys_user_f3
add constraint fk_typeid_alter foreign key(typeID_new) references Sys_User_type(typeID) on delete cascade;
3、禁用外键约束
格式:
ALTER TABLE table_name
DISABLE | ENABLE CONSTRAINT constraint_name
操作:
alter table sys_user_f3
disable constraint fk_typeID_alter;
select constraint_name,constraint_type,status from user_constraints where table_name='SYS_USER_F3';
4、删除外键约束
alter table sys_user_f3
drop constraint fk_typeID_alter;
四、唯一约束
作用:保证字段值的唯一性
唯一约束和主键约束的区别:
- 主键字段值必须是非空的
- 唯一约束允许有一个空值
- 主键在每一张表中只能有一个
- 唯一约束在每张表中可以有多个
1、在创建表时设置唯一约束
create table Sys_User_U
(
UserID number(6,0) primary key,
username varchar2(20) unique,
userpwd varchar2(20)
);
有名字的约束:
create table Sys_User_U2
(
UserID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20),
constraint un_username unique(username)
);
2、在添加表时添加唯一约束
create table Sys_User_U3
(
UserID number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20)
);
alter table sys_user_u3
add constraint un_username_new unique(username);
3、禁用唯一约束
alter table sys_user_u3
disable constraint un_username_new;
select constraint_name,constraint_type,status from user_constraints where table_name='SYS_USER_U3';
4、删除唯一约束
alter table sys_user_u3
drop constraint un_username_new;
五、检查约束
作用:表中的值更具有实际意义
1、在创建表时设置检查约束
create table Sys_User_C
(
UserID number(6,0) primary key,
username varchar2(20),
Salary number(5,0) check(Salary>0)
);
insert into sys_user_c values(1,'张三',-100);
有名字的约束;
create table Sys_User_C1
(
UserID number(6,0) primary key,
username varchar2(20),
Salary number(5,0),
constraint ck_salary check(Salary>0)
);
2、在修改表时添加检查约束
create table Sys_User_C2
(
UserID number(6,0) primary key,
username varchar2(20),
Salary number(5,0)
);
alter table sys_user_c2
add constraint ck_salary_new check(Salary>0);
3、禁用检查约束
alter table sys_user_c2
disable constraint ck_salary_new;
select constraint_name,constraint_type,status from user_constraints where table_name='SYS_USER_C2';
4、删除检查约束
alter table sys_user_c2
drop constraint ck_salary_new;
六、更改约束的名称
数据字典(user_constraints)
RENAME CONSTRAINT old_name
TO new_name
删除约束,唯独非空约束例外:
ALTER TABLE table_name
MODIFY column_name datatype NULL;