一、概述

  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入门第四天(下)——约束的更多相关文章

  1. Oracle入门第四天(上)——表管理与数据处理

    一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...

  2. TYUT程序设计入门第四讲练习题题解--数论入门

    程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...

  3. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  4. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

  5. Oracle入门第五天(下)——数据库其他对象

    一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...

  6. Oracle入门第三天(下)——子查询

    一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...

  7. CTF---密码学入门第四题 困在栅栏里的凯撒

    困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...

  8. Linux零基础入门第四课

    根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...

  9. Oracle入门第三天(上)——多表查询与分组函数

    一.多表查询 所有的连接分析,参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html 1.笛卡尔积 select last_name, depart ...

随机推荐

  1. LNMP-day1-安装并配置

    Nginx安装 #Nginx [root@localhost downloads]# pwd /root/downloads #安装依赖pcre [root@localhost downloads]# ...

  2. OC基础数据类型-NSValue

    1.NSValue:将指针等复杂的类型存储为对象 struct sct { int a; int b; }sctt; NSValue * value = [[NSValue alloc] initWi ...

  3. Java.lang 包 (包装类、String类、Math类、Class类、Object类)

    Java 的核心 API(Application Programming Interface)是非常庞大的,这给开发者带来了很大的方便. java.lang 包是 Java 的核心类库,它包含了运行 ...

  4. hdu-3397 Sequence operation 线段树多种标记

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a- ...

  5. BZOJ1369:[Baltic2003]Gem(树形DP)

    Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个 ...

  6. P3174 [HAOI2009]毛毛虫

    题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入输出格 ...

  7. 从getshell到提权

    从getshell到提权 一.起因 学校推出新的党建系统,之前党建系统还参与开发,后来因为一些原因没有开发,主要想看看这届工作室的学弟.学妹代码水平,把源码撸下来审计一下,工作室用git开发的,记着上 ...

  8. x-frame-options、iframe与iframe的一些操作

    iframe的子操作父窗口,父操作子窗口: test.php: <!DOCTYPE html> <html> <head> <title>test< ...

  9. 在Windows 10中更改网络连接优先级

    查看接口列表 (也可使用 如下) 选择网络连接,然后单击右侧的箭头以更改网络连接优先级.  可以参考之前的部分 链接在此 更改单个wi-fi连接顺序可以使用如下

  10. svn .externals 属性

    问:如下自定下载关联模块呢? 答:第一步: 编辑svn.externals文本,如下所示 dir/moduel_name URL/module dir/moduel_name URL/module 第 ...