Oracle入门第四天(下)——约束
一、概述
1.分类
表级约束主要分为以下几种:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
2.注意事项
如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
创建和修改约束: 建表的同时 建表之后
可以在表级或列级定义约束
可以通过数据字典视图查看约束
3.建立约束的方式
列级:column [CONSTRAINT constraint_name] constraint_type,
表级:column,... [CONSTRAINT constraint_name] constraint_type (column, ...),
二、非空约束——NOT NULL
在定义表DDL时直接添加:
CREATE TABLE emp3(
id NUMBER(32) NOT NULL,
name VARCHAR2(10) CONSTRAINT emp3_name_nn NOT NULL
)
1.注意单词constraint的写法;
2.可以采用自定义命名约束(一般用 表名_列名_约束名的形式),若省略,则采用系统命名

三、唯一约束——UNIQUE
注意以下两种添加约束的写法:
CREATE TABLE emp4(
id NUMBER(32) UNIQUE,
name VARCHAR2(10),
CONSTRAINT emp4_name_uk UNIQUE(name)
)
1.唯一约束中是允许出现NULL值的
2.允许出现多个NULL值
// 建议采用给约束命名的方式进行管理约束
四、主键约束——PRIMARY KEY
根据主键的定义,主键约束自动拥有:唯一非空约束
CREATE TABLE emp5(
id NUMBER(32),
name VARCHAR2(10),
CONSTRAINT emp4_id_pk PRIMARY KEY(id)
)
// 主键用于唯一确定一条记录
五、外键约束——FOREIGN KEY
参照其他列的主键,称为外键(外键的值必须在参考列存在)
CREATE TABLE emp6(
id NUMBER(32),
name VARCHAR2(10),
CONSTRAINT emp4_id_fk FOREIGN KEY(id) REFERENCES emp5(id)
)
外键可选项:
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
示例:
CREATE TABLE emp6(
id NUMBER(32),
name VARCHAR2(10),
CONSTRAINT emp4_id_fk FOREIGN KEY(id) REFERENCES emp5(id) ON DELETE CASCADE
)
六、检查约束——CHECK
定义必须满足的条件的约束
CREATE TABLE emp7(
id NUMBER(32),
name VARCHAR2(10),
CONSTRAINT emp7_id_ck CHECK(id > 1000 AND id < 2000)
)
七、约束管理
都是基于ALTER TABLE进行管理的!
1.添加约束
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
示例:
ALTER TABLE emp7 ADD(CONSTRAINT emp7_name_pk PRIMARY KEY(name))
添加NOT NULL约束需要使用MODIFY关键字:
Alter table emp modify(empname varchar2(50) not null);
2.删除约束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
// 所以说自定义命名约束便于管理
3.无效化约束
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk;
4.激活无效的约束
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk;
5.查询约束
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';
6.查询约束的列
通过数据字典视图:USER_CONS_COLUMNS,实际上,如果约束名有规范是可以直接看到的!
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';
Oracle入门第四天(下)——约束的更多相关文章
- Oracle入门第四天(上)——表管理与数据处理
一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...
- TYUT程序设计入门第四讲练习题题解--数论入门
程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...
- JavaMail入门第四篇 接收邮件
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- Kotlin入门第四课:简单工厂模式
Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...
- Oracle入门第五天(下)——数据库其他对象
一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...
- Oracle入门第三天(下)——子查询
一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...
- CTF---密码学入门第四题 困在栅栏里的凯撒
困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...
- Linux零基础入门第四课
根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...
- Oracle入门第三天(上)——多表查询与分组函数
一.多表查询 所有的连接分析,参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html 1.笛卡尔积 select last_name, depart ...
随机推荐
- 沉淀再出发:jvm的本质
沉淀再出发:jvm的本质 一.前言 关于jvm,使用的地方实在是太多了,从字面意思上我们都能明白这也是一个虚拟机,那么其他的虚拟机都会用来运行别的操作系统的,而jvm却是实现了可以在不用的操作系统之上 ...
- ZT 设计模式六大原则(1):单一职责原则
zt 设计模式六大原则(1):单一职责原则 分类: 设计模式 2012-02-21 09:52 25059人阅读 评论(65) 收藏 举报 设计模式stringclass编程 (THERE SHOUL ...
- 环信REST API python SDK
今天鼓起勇气,决定把这个贡献出来.不敢误人子弟,也一直担心,在不良质量的产品会祸害人,但自己已经使用,它本身也没技术. 平庸的代码,高效地实用,为环信贡献点力,如有问题,欢迎斧正,一起学习,一起成长, ...
- swift动态库与use_frameworks
使用Dynamic 的优势: 模块化,相对于Static Library,Framework可以将模块中的函数代码外的资源文件打包在一起. 共享可执行文件 iOS 有沙箱机制,不能跨App间共享共态库 ...
- 关于C#读取xml小例子
1.首先这是一个xml文件<?xml version="1.0" encoding="utf-8"?><Document> <Ev ...
- LayIM.AspNetCore Middleware 开发日记(二)预备知识介绍
前言 开发一个AspNetCore的中间件需要理解RequestDelegate.另外,还需要理解.NET Core中的依赖注入.还有一个就是内嵌资源的访问.例如:EmbeddedFileProvid ...
- [转]TortoiseSVN客户端的安装
TortoiseSVN是windows平台下Subversion的免费开源客户端. 一般我们都是先讲讲服务器的配置,然后再讲客户端的使用,但是在TortoiseSVN上,却可以反过来.因为,如果你的要 ...
- vlc源码分析(六) 调用OpenMAX硬解码H.265
H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.26 ...
- 学习VCL之路(1)
在TObject类中,有一个Dispatch()方法和一个DefaultHandler()方法,它们都是与消息分发机制相关的. Dispatch()负责将特定的消息分发给合适的消息处理函数.首先它会在 ...
- Java 常用IO流操作详解
1.基本概念 IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中. 2.IO流的分类 图示:(主要IO流) 3.字节流 ...