约束作用:用来保持数据的完整性,防止无效数据进入到数据库中。
oracle数据库中提供的5种约束,都是限定某个列或者列的组合的。
1、主键约束(PRIMARY KEY):在一个表中能唯一的标识一行。主键可以限定在多个列上。
2、唯一键约束(UNIQUE key):在一个表中能唯一的标识一行,唯一键也可以限定在多个列上。
主键和唯一键的区别:
a、一个表中最多只能有一个主键。可以多个唯一键。
b、主键所限定的列不能为null,唯一键所限定的列可以为null.
3、外键约束(FOREIGN key):
   引用表:有外键约束的列所在的表。
   被引用表:外键所引用的列。被引用的列只能是主键或者唯一键。
4、非空约束(NOT null):表示该列上的数据不能有null值。
5、检查性约束(check):表示该列上的数据必须满足某一个条件表达式。

如何创建约束:
1、在创建表的同时创建约束
   a.列级别约束:在每个列写完之后写约束。
          CREATE TABLE t_08132(id NUMBER(10) PRIMARY KEY ,
                                NAME CHAR(10) NOT NULL,
                                gender CHAR(2) CHECK (gender IN ('男','女')),
                                email CHAR(20) UNIQUE
                                )
          INSERT INTO t_08132 VALUES(1,'a','男','1@neusoft.com')                               
          INSERT INTO t_08132 VALUES(2,'a','男','2@neusoft.com')                               
          INSERT INTO t_08132 VALUES(3,'c','男','3@neusoft.com')                               
          INSERT INTO t_08132 VALUES(4,'d','','4@neusoft.com')                               
          INSERT INTO t_08132 VALUES(5,'e','妖','5@neusoft.com')       
          //外键约束
          CREATE TABLE t_08133( id NUMBER(10) PRIMARY KEY ,
                                NAME CHAR(10) NOT NULL,
                                deptno NUMBER(2) REFERENCES dept(deptno)                               
                                )
          INSERT INTO t_08133 VALUES(1,'a',20) 
          //给约束命名         
          CREATE TABLE t_08134(id NUMBER(10) CONSTRAINT t4_id_pk PRIMARY KEY ,
                                NAME CHAR(10) CONSTRAINT t4_name_nn NOT NULL,
                                gender CHAR(2) CONSTRAINT t4_gen_ck CHECK (gender IN ('男','女')),
                                email CHAR(20) CONSTRAINT t4_em_uk UNIQUE,
                                deptno NUMBER(2) CONSTRAINT t4_deptno_fk REFERENCES dept(deptno)                               
                                )
          INSERT INTO t_08134 VALUES(5,'e','男','5@neusoft.com',NULL)                      
          INSERT INTO t_08134 VALUES(6,'e','男','6@neusoft.com',NULL)                      
   b.表级别约束:在所有列写完之后写约束。注意,notnull约束不能写在表级别上。
      CREATE TABLE t_08135(id NUMBER(10)  ,
                                NAME CHAR(10) CONSTRAINT t5_name_nn NOT NULL,
                                gender CHAR(2) ,
                                email CHAR(20) ,
                                deptno NUMBER(2) ,
                                CONSTRAINT t5_id_pk PRIMARY KEY (ID),
                                CONSTRAINT t5_gen_ck CHECK (gender IN ('男','女')),
                                CONSTRAINT t5_em_uk UNIQUE(email),
                                CONSTRAINT t5_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)                               
                               )
约束的名字:一般规则 约束所在的表_约束所在的列_约束类型
 emp_empno_pk,通常只给主键、外键、唯一键命名。

2、在创建表之后创建约束
语法:
Alter TABLE 表名 ADD [CONSTRAINT 约束名] 约束类型 [(列名列表)]
CREATE TABLE t08161 (ID NUMBER,NAME CHAR(10),sex CHAR(2) ,email CHAR(10),deptno NUMBER)
//在ID字段上添加主键约束
ALTER TABLE t08161 ADD CONSTRAINT t1_id_pk PRIMARY KEY(ID)
//在sex字段上添加检查性约束
ALTER TABLE t08161 ADD CONSTRAINT t1_email_ck CHECK (sex IN ('男','女'))
//在email上添加唯一性约束
ALTER TABLE t08161 ADD CONSTRAINT t1_email_uk UNIQUE (email)
//在deptno上添加外键约束,引用于dept的deptno字段。
ALTER TABLE t08161 ADD CONSTRAINT t1_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)
//在name上添加非空约束
ALTER TABLE t08161 ADD CONSTRAINT t1_name_nn NOT NULL (NAME)    //加不上

ALTER TABLE t08161 MODIFY NAME NULL  
ALTER TABLE 表名 MODIFY 字段名 NULL/NOT NULL   //通过该语法设置某一个字段为null或者not NULL.
//练习:
创建表学生表,里面包含学号(主键),姓名(非空),年龄,入班日期,
班级编号(外键,引用于dept表部门编号)
要求,在创建完表之后建立约束。
CREATE TABLE t08162 (sno NUMBER ,sname CHAR(10) ,sage NUMBER ,indate DATE,classno NUMBER)
ALTER TABLE t08162 ADD PRIMARY KEY (sno)
ALTER TABLE t08162 MODIFY sNAME NOT NULL
ALTER TABLE t08162 ADD FOREIGN KEY(classno) REFERENCES dept(deptno)
4、如何删除约束
ALTER TABLE 表名 DROP PRIMARY KEY|UNIQUE (列)|CONSTRAINT 约束名
ALTER TABLE t08162 DROP PRIMARY KEY
练习:删除t08162上的classno上的外键约束
ALTER TABLE t08162 DROP CONSTRAINT sys_c005467
5、约束的启用和禁用。
语法:
Alter TABLE 表名 Disable|ENABLE CONSTRAINT 约束名

转自:http://www.blogjava.net/stevenjohn/archive/2012/09/04/387023.html

oracle数据库中提供的5种约束的更多相关文章

  1. 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中

    oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多,在这介绍两个. 第一种,把oracle查询的数据导出为sql文件,执行sql文件里的insert语句,如下: 第一步,导出sq ...

  2. Oracle 数据库中查看表空间的2种方法

    在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...

  3. 查找Oracle数据库中的重复记录

    本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同的方法来确定库表中重复的记录 方法1:利用分组函数查找表中的重复行:按照某个字段分组,找出行 ...

  4. (面试题)如何查找Oracle数据库中的重复记录

    今天做了个面试题:查找Oracle数据库中的重复记录,下面详细介绍其他方法(参考其他资料) 本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同 ...

  5. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  6. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  7. Oracle数据库中的变量

    Oracle数据库中的变量 来源:https://blog.csdn.net/wahaa591/article/details/46772769 1.define(即host变量) define va ...

  8. Oracle数据库中有关记录个数的查询

    一.查询表中全部的记录个数 可用两种方法,一种是在oracle的系统表中统计,另一种需要写存储过程统计,方法分别如下. 1.系统表中统计: SELECT sum(num_rows) FROM user ...

  9. Django中提供的6种缓存方式

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

随机推荐

  1. js调用后台方法(如果你能容忍执行的后台方法变成一个常量)

    最近一直在做一个电话拨号的系统,系统不大,但是做的时间有点长了.其中用到了一个技术:js调用后台方法.解决这个问题花了不少时间,现如今仍然还有些不明白的地方,今天跟大家分享一下.真正明白的同学欢迎指正 ...

  2. 鸟哥的linux私房菜学习记录之程序管理和SElinux初探

    process是进程的意思也就是说进程是正在运行的程序 将后台程序的错误信息等等输出到某个文档 终端关闭后会停止运行,如果想终端关闭后继续运行可以使用nohup命令,man nohup.

  3. 统一使用GPT分区表,安装MAC 10.10 和 Win8.1 pro双系统

    步骤一: 为Mac OS 分区,为其它分区留白1,使用OSX Mavericks制作的Mac安装U盘按住Option键启动:2,选择安装Mavericks盘符:3,进入OSX安装启动界面,选择磁盘工具 ...

  4. matlab读入矩阵数据

    方法: 很简单,把矩阵数据存到excel里,然后存成cvs的格式,就是把每行数据之间用‘,’分隔:行与行之间用‘\n’保存. 举例: 假设cvs为test_nnfeature.txt,后缀可以改啦,只 ...

  5. [ Laravel 5.3 文档 ] 安全 ―― API认证(Passport)保障安全性。

    1.简介 Laravel通过传统的登录表单已经让用户认证变得很简单,但是API怎么办?API通常使用token进行认证并且在请求之间不维护session状态.Laravel使用LaravelPassp ...

  6. 修改datagridview中其中一列的值

    控件.rows[0].cells['名'].value = 值

  7. JAVA基础知识之Set集合

    Set集合的基本特征是不记录添加顺序,不允许元素重复(想想是为什么).最常用的实现类是HashSet. 本文将要介绍以下内容 HashSet类 HashSe的特征 HashSet的equals和has ...

  8. pip命令使用国内pypi镜像源加速在线安装

    参考:http://www.cnblogs.com/yudar/p/4444097.html 用easy_install和pip来安装第三方库很方便 它们的原理其实就是从Python的官方源pypi. ...

  9. InputStream和Reader区别

    InputStream,OutputStream  前者为字节输入流,后者为字节输出流.Reader   Writer  前者为字符输入流,后者为字符输出流. 四个均为抽象类.fileInputStr ...

  10. MySQL中删除重复数据的简单方法,mysql删除重复数据

    MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式, ...