Constraint约束

作者:李永健
撰写时间: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表名

Constraint约束_第1张图片

查询定义约束的列 : user_cons_columns
SELECT	constraint_name, column_name
FROM	user_cons_columns
WHERE	table_name = 'EMPLOYEES';

Constraint约束_第2张图片

你可能感兴趣的:(Constraint约束)