为了维护数据库数据的完整性,在创建表时需要定义一些约束,Oracle中的约束类型包括:非空约束、主键约束、唯一约束、外键约束等。在对约束操作前,我们可以通过表名查询它具有的约束信息。

表约束

SELECT table_name, owner,constraint_name,table_name,r_owner,r_constraint_name
FROM all_constraints
WHERE table_name = 'T_TEST1';

列约束
SELECT *
FROM ALL_CONS_COLUMNS
WHERE table_name = 'T_TEST1'
AND    owner='SCOTT';

1 非空约束

非空约束限制某列必须有值,不能为NULL,NULL是不存在的值,它既不是数字0也不是空字符串,而是不存在,未知的情况。定义非空约束非常简单:

create table t_test1

(

  id number not null, -- 非空约束

  name varchar2(50)

);

也可以单独设置某列为非空或者为空

alter table t_test1 modify name not null/null;

2 主键约束

主键(primary key)约束用于唯一标识表中的每一行记录。主键约束由一列组成时,被称为行级约束;由两列或者更多列组成时,称为表级约束。 

create table t_test1

(

  id number not null, -- 非空约束

  name varchar2(50),

  constraint PK_ID primary key(id) --主键约束

);

单独设置主键约束

alter table t_test1 add constraint PK_ID primary key(id);

删除主键约束

alter table t_test1 drop constraint PK_ID;

3 唯一性约束

唯一性约束(unique)强制要求所在列不能有重复值,它的定义比主键约束弱,允许列有空值(NULL)。用于保证除主键外其他列值的唯一性。

create table t_test1

(

  id number not null, -- 非空约束

  name varchar2(50) constraint uk_name unique  -- constraint un_name unique(name)

);

单独设置唯一性约束

alter table t_test1 add constraint uk_name unique(name);

4 外键约束

外键约束使用两个或者以上的表进行关联,表1引用表2的某列或者几列,表1的列在表2必须存在,且表2的列必须为主键约束或者唯一性约束。

create table t_department
(
  depno number not null primary key,
  depname varchar2(50) not null
);

create table t_test1
(

  id number not null,
  depno number not null,
  name varchar2(50)
);

alter table t_test1 add constraint FK_depno foreign key(depno) references t_department(depno);

5 禁用激活约束

alter table t_test1 disable constraint FK_DEPNO;

alter table t_test1 enable constraint FK_DEPNO;

6 删除约束

alter table t_test1 drop constraint FK_DEPNO;

  

Oracle 数据完整性与约束机制的更多相关文章

  1. Oracle连接数过多释放机制

    Oracle连接数过多释放机制  sqlplus /nolog   打开sqlplus          connect /as sysdba    使用具有dba权限得用户登陆oracle      ...

  2. 改写了禁用或启用oracle数据库的约束的存储过程

    改写了网上某位大侠(最开始的源头是哪位没记住)写的禁用或启用oracle数据库所有约束的存储过程,增加了异常控制,以使发生异常时也可以执行下去. –调用过程: 执行前先 set serveroutpu ...

  3. Oracle E-Business Suite并发处理机制(Current Processing)

    2012年写过一篇关于Oracle E-Business Suite并发管理器的文章,回头看之前总结的内容还是比较单薄,很多点没说到,最近在看这块的内容,索性再写一篇稍微完整的文章来. Oracle ...

  4. oracle中,约束、表名、Index等的名称长度限制最大只能30个字符

    oracle中,约束.表名.Index等的名称长度限制最大只能30个字符

  5. Oracle表级约束和列级约束

    Oracle表级约束和列级约束 1. 表级定义约束 指的是在定义完一个表所有列之后,再去定义所有相关的约束. 注意:not null 约束只能在列级上定义. 2. 列级定义约束 指的是在定义一个表的每 ...

  6. InnoDB的约束机制

    数据完整性 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制.几乎所有的关系型数据库都提供了约束(constra ...

  7. Oracle 外键约束

    本文讨论一下Oracle中的外键约束问题,以及和DB2中的小不同. 首先创建测试环境. -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, valu ...

  8. Oracle事务和锁机制

    事务 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行 ...

  9. Oracle 唯一 索引 约束 创建 删除

    http://www.blogjava.net/lukangping/articles/340683.html/*给创建bitmap index分配的内存空间参数,以加速建索引*/ show para ...

随机推荐

  1. docker toolbox的redis 配置主从及哨兵模式保证高可用

    redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一   主从模式1 搜索redis镜像  docker search redis2 拉取镜像docker pul ...

  2. sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xE6\\xB1\\x89\\xE8\\xAF\\xAD...' for column 'className' at row 1") [SQL: INSERT INTO classmessage (`classId

    sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xE ...

  3. 转载:JavaWeb 文件上传下载

    转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...

  4. 织梦DEDECMS 5.7文章列表第一页dedefield.content

    功能介绍:有很多DEDEcms使用者,在二级文章列表中加入了{dede:field.content/},但在二级栏目中的每一页列表中都存在内容:使用该功能可以只在第一页显示. 注意:只针对最新dede ...

  5. Vi编辑器中查找替换

    1 第一个是替换当前行的yesterday为all 第二个是替换全局的 yesterday 为all :s/yesterday/all :s/yesterday/all/g

  6. QT Qdialog的对话框模式以及其关闭

    模式对话框 描述 阻塞同一应用程序中其它可视窗口输入的对话框.模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口.模式对话框仅阻止访问与对 ...

  7. windows10 mysql主从复制配置

    注意:mysql主从复制,主从版本要一致! 生手永远在学习的路上,为了学习mysql主从复制,实现读写分离,于是在本地安装多个mysql实例来进行验证. 也因此有了下面的笔记,一来自我总结一下经验,二 ...

  8. Vue自行封装常用组件-倒计时

    倒计时组件,比较复杂一点,大神勿调侃,精确到毫秒,因为项目中多次出现倒计时,所以拿出来分享下 使用方法:1.在父组件中引入"uni-countdown" //import uniC ...

  9. mysql之单表条件查询

    create table staff_info( id int primary key auto_increment, name varchar(32) not null, age int(3) un ...

  10. jquery checkbox选择器 语法

    jquery checkbox选择器 语法 作用::checkbox 选择器选取类型为 checkbox 的 <input> 元素.大理石平台价格表 语法:$(":checkbo ...