作者:李永健
撰写时间:2019年 06月04日
开发工具与关键技术:Oracle sql*plus 、 PLSQL Developer
有以下五种约束:
NOT NULL 不能为空 只能定义在列上
UNIQUE 不能重复
PRIMARY KEY不能为空并不能重复的主键
FOREIGN KEY 设置外键
CHECK 值的范围
表级约束和列级约束:
作用范围:
①列级约束只能作用在一个列上
②表级约束可以作用在多个列上(当然表级约束也
可以作用在一个列上)
定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义
例子:
Create table employees(
Employee_id number(6) primary key, 设置主键
Last_name varchar2 unique, 不能重复
Email varchar2 not null, 不能为空
Department_id number(3)
Salary number(100) check(salary > 2000 and salary < 10000 ) 指定范围
Manager_id number(50) ,
ManagerName varchar2
Job_id number(10) constraint jian not null, 在列级上写不能为空
Constraint jian1 foreign key Department_id References
departments(department_id) ); 在表级上设置外键departments父表
Jian1:约束名 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
使用 ALTER TABLE 语句:
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加 NOT NULL 约束要使用 MODIFY 语句
ON DELETE CASCADE(级联删除):当父表中的列被删除时,子表中相对应的列也被删除
例子:
新建父表
create table jian7(ids NUMBER(2)primary key,name VARCHAR2(14));
添加几条数据
insert into jian5 values(1,'txet');
级联:
create table jian5(id NUMBER(2)primary key,name VARCHAR2(14),ids NUMBER(2),constraint sss
foreign key (ids) references jian7(ids) on delete cascade)
子表添加几条数据
insert into jian5 values(1,'健',1);
删除父表中id为2的数据
delete from jian7
Where ids = 2
子表中相对应的列也被删除如下图:
ON DELETE SET NULL(级联置空):当父表中的列被删除时,子表中相应的列置空
例子如上类似
Create table emp01 (id number(5) primary key,department_id number(6),
constraint tt foreign key(department_id) references jianjian(department_id) on delete set null)
添加约束 :add
Alter table jian3 add constraint sss unique(name) name:列名
删除约束 : drop
Alter table jian3 drop constraint sss 删除约束名
无效化约束:disable
Alter table jian3 disable constraint sss
激活约束:enable
Alter table jian3 enable constraint sss
查询约束 :user_constraints
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES'; EMPLOYEES表名
查询定义约束的列 : user_cons_columns
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';