2021.10.30
目录
添加约束
表级约束和列级约束
列级约束只能作用在一个列上
表级约束可以作用在多个列上,也可以在一个列上
not null
非空约束,填入数据为空时会报错
create table emp2(
id number(10) constraint emp2_id_nn
not null, --可以给约束进行命名
name varchar2(20) not null,
salary number(10)
constraint emp2_salary_nn(email) not null--表级约束,括号内指定列名
)
unique
不可重复约束
但null值可以重复插入
主键primary key
唯一值,可以理解为身份证号
主键需要非空,并且不可重复
外键foreign key
可以简单理解为使用另一张表中的主键
create table emp3(
id number(10) constraint emp3_id_pk primary key,
department_id number(10),
constraint emp3_dptid_fk foreign key(department_id) references departments(department_id)
--取department表中的dpt_id列作为本表的外键
)
外键中的值必须存在于对应表的主键中
on delete cascade(级联删除)
父表中的列被删除时,子表中对应的列也被删除
on delete set null(级联置空)
对应列置空
constraint emp3_dptid_fk foreign key(department_id) references departments(department_id) on delete set null
check
添加限制条件
create table emp4(
salary number(10,2) check(salary >1500 and salary<10000)
--老资本家了
)
“修改”约束
使用alter table语句:
添加或删除约束,不能直接修改约束
有效化或无效化约束
添加not null约束要使用modify语句
alter table emp4
modify(salary number(10,2) not null)
删除约束
alter table emp4
drop constraint emp4_salary_nn
添加其他约束
atler table emp3
add constraint emp2_salary_uk unique(salary)
无效化/有效化约束
alter table emp3
disable constraint emp3_email_uk
alter table emp3
enable constraint emp3_email_uk
在enable时若原表不满足约束则无法有效化
查询约束
利用数据字典视图user_constraints
select constraint_name, constraint_type,
search_condition
from user_constraints
where table_name = 'table1'
查询定义约束的列
利用user_cons_columns
select constraint_name, column_name,
from user_cons_columns
where table_name = 'table1'
总结
回头一定要把数据库再啃一遍,基础课程真的有用