Oracle系列十二 约束
2024-10-21 10:08:46
约束是表级的强制规定
有以下五种约束:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
注意事项
- 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
- 创建和修改约束:
- 建表的同时
- 建表之后
- 可以在表级或列级定义约束
- 可以通过数据字典视图查看约束
表级约束和列级约束
作用范围:
①列级约束只能作用在一个列上
②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)
定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
定义约束
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));
定义约束
- 列级
column [CONSTRAINT constraint_name] constraint_type,
- 表级
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
NOT NULL 约束
- 保证列值不能为空:
- 只能定义在列级:
UNIQUE 约束
- 唯一约束,允许出现多个空值:NULL。
- 可以定义在表级或列级:
PRIMARY KEY 约束
可以定义在表级或列级:
CREATE TABLE departments(
department_id NUMBER(4),
department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
FOREIGN KEY 约束
可以定义在表级或列级:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));
FOREIGN KEY 约束的关键字
- FOREIGN KEY: 在表级指定子表中的列
- REFERENCES: 标示在父表中的列
- ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
- ON DELETE SET NULL(级联置空): 子表中相应的列置空
CHECK 约束
- 定义每一行必须满足的条件
添加约束
使用 ALTER TABLE 语句:
- 添加或删除约束,但是不能修改约束
- 有效化或无效化约束
- 添加 NOT NULL 约束要使用 MODIFY 语句
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
以create table emp as select * from employees;为例,添加和删除约束
Alter table emp modify(empname varchar2(50) not null);
示例
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk FOREIGN KEY ( manager_id )
REFERENCES employees ( employee_id );
删除约束
- 从表 EMPLOYEES 中删除约束
ALTER TABLE employees DROP CONSTRAINT emp_manager_fk;
无效化约束
- 在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。
ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk;
激活约束
- ENABLE 子句可将当前无效的约束激活
- 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk;
查询约束
- 查询数据字典视图 USER_CONSTRAINTS
SELECT
constraint_name,
constraint_type,
search_condition
FROM
user_constraints
WHERE
table_name = 'EMPLOYEES';
- 查询数据字典视图 USER_CONS_COLUMNS
SELECT
constraint_name,
column_name
FROM
user_cons_columns
WHERE
table_name = 'EMPLOYEES';
最新文章
- Database 'xxxx' is being recovered. Waiting until recovery is finished.
- StartUML2.8破解
- Linux学习笔记(4)Linux常用命令之权限管理命令
- javascript改变样式(cssFloat,styleFloat)
- oracle树操作(select start with connect by prior)
- 在Linux下搭建SVN服务器
- 使用mysql索引的规则
- WPF-控件-编辑圆角TextBox
- 【转】深入 char * ,char ** ,char a[ ] ,char *a[] 内核
- 原生 JavaScript 代码和Jquery实现对比
- poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
- lua调用C语言
- Hive 行列转换
- CentOS7修改SSH远程连接端口
- IIS前端页面不显示详细错误解决方法
- redis简介(keeper实时报表的基本部分)
- macOS: sudo : Operation not permitted
- Java知多少(99)Graphics2D类的绘图方法
- kubernetes的CI/CD
- Android之greenDao,一个orm的使用
热门文章
- jmeter的简单使用0723
- 05-jQuery介绍
- Local CubeMap实现玻璃折射
- docker学习2-快速搭建centos7-python3.6环境
- 微信小程序~Flex布局
- jq function return value
- 利用Python绘制一个正方形螺旋线
- 绑定事件 .on(";click";,function(){})和.click(function(){})
- windows认证过程
- NOIP爆炸记