文章目錄
約束的作用:
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;