约束是每个数据库必不可少的一部分,约束的目的在于保存数据的完整性。数据完整性是指数据的精确性和可靠性。数据库约束主要包括:主键约束、外键约束、唯一性约束、检查约束和默认值约束。

  1、主键约束

  主键约束可以保障数据完整性,防止数据表中的两条记录完全相同。通过主键输入查询条件,可以查询结果最多返回一条记录。

  主键被创建在一个或多个列上,通过这些列的值或者值的组合,唯一地标识一条记录。

  1>、创建主键约束

  主键约束作为表结构设计的一部分,一般在创建表的时候创建。创建主键约束使用关键字primary key。

  2>、查看主键约束

select table_name,constraint_name,constraint_type,status from user_constraints
where table_name='emp'
select constraint_name,table_name,column_name from user_cons_columns
where constraint_name='SYS_C005121'

  3>、显示命名主键约束

CREATE TABLE EMP
(
EMP_ID NUMBER CONSTRAINT PK_EMP PRIMARY KEY,
EMP_NAME VARCHAR(20)
)
CREATE TABLE EMP
(
EMP_ID NUMBER,
EMP_NAME VARCHAR(20),
CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID)
)

  4>、创建多列主键

CREATE TABLE EMP
(
EMP_ID NUMBER,
EMP_NAME VARCHAR(20),
CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID,EMP_NAME)
)

  5>、为表添加主键

ALTER TABLE EMP MODIFY (EMP_ID NUMBER PRIMARY KEY)

  6>、为表添加多列主键

ALTER TABLE EMP ADD CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID,EMP_NAME)

  7>、删除主键

ALTER TABLE EMP DROP PRIMARY KEY

  DROP PRIMARY KEY用于删除表的主键,由于一个表的主键是唯一的,所以无须指定主键名。

ALTER TABLE EMP DROP CONSTRAINT PK_EMP

  DROP CONSTRAINT用于删除表的约束,一个表的约束可能有多个,所以必须指定约束的名称。

  8>、启用/禁用主键

ALTER TABLE EMP DISABLE PRIMARY KEY
ALTER TABLE EMP ENABLE PRIMARY KEY

  9>、重命名主键约束名称

ALTER TABLE EMP RENAME CONSTRAINT SYS_C005245 TO PK_EMP

  2、外键约束

  外键与之间用于用于保证数据完整性,主键是针对单个表的约束,外键则描述了表之间的关系。

  1>、创建外键约束

CREATE TABLE CUSTOMERS
(
CUSTOMER_ID NUMBER,
CUSTOMER_NAME VARCHAR(20),
CONSTRAINT PK_CUSTOMERS PRIMARY KEY(CUSTOMER_ID)
)
CREATE TABLE ORDERS
(
ORDER_ID NUMBER,
CUSTOMER_ID NUMBER,
PRODUCT_NAME VARCHAR(20),
QUANTITY NUMBER,
CONSTRAINT PK_ORDERS PRIMARY KEY(ORDER_ID)
)
ALTER TABLE ORDERS ADD CONSTRAINT FK_ORDERS_CUSTOMERS FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMERS(CUSTOMER_ID)

  2>、查看外键

SELECT TALBE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE, R_CONSTRAINT_NAME FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'ORDERS'

  3>、级联删除

  ON DELETE CASCADE选项指定创建的外键实现级联删除,即删除主表的记录时,字表中的子记录同时被自动删除。删除子表记录的动作由Oracle数据自动实现的。

ALTER TABLE ORDERS ADD CONSTRAINT FK_ORDERS_CUSTOMERS FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMERS(CUSTOM) ON DELETE CASCADE

  4>、重命名外键约束

ALTER TABLE ORDERS RENAME FK_ORDERS_CUSTOMERS TO FK_ORDERS

  5>、启用/禁用外键

ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS DISABLE
ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS ENABLE

  在默认情况下,启用外键时,将会对已有的数据进行校验。可以使用NOVALIDATE选项,使Oracle不对已有数据进行校验,从而直接启用外键。

ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS ENABLE NOVALIDATE

  6>、删除外键

ALTER TABLE ORDERS DROP CONSTRAINT FK_ORDERS_CUSTOMERS

  3、惟一性约束

  1>、创建惟一性约束

CREATE TABLE USERS
(
USER_ID NUMBER PRIMARY KEY,
USER_NAME VARCHAR2(20),
EMAIL VARCHAR2(100) UNIQUE
)

  2>、添加惟一性约束

ALTER TABLE USERS ADD CONSTRAINT UQ_EMAIL UNIQUE (EMAIL)

  3>、删除惟一性约束

ALTER TABLE USERS DROP CONSTRAINT UQ_EMAIL

  4>、重命名惟一性约束

ALTER TABLE USERS RENAME CONSTRAINT SYS_C005188 TO UQ_EMAIL

  5>、禁用/启用惟一性约束

ALTER TABLE USERS DISABLE CONSTRAINT UQ_EMAIL

  或:

ALTER TABLE USERS MODIFY CONSTRAINT UQ_EMAIL DISABLE

  4、检查约束

  检查约束对列值进行限制,将表中的一列或多列限制在某个范围内。

  1>、创建检查约束

CREATE TABLE STUDENTS
(
STUDENT_ID NUMBER PRIMARY KEY,
STUDENT_NAME VARCHAR2(20),
SCORE NUMBER,
    CONSTRAINT CK_SCORE CHECK(SCORE BETWEEN 0 AND 100)
)

  2>、添加检查约束

ALTER TABLE STUDENTS ADD CONSTRAINT CK_STUDENT_NAME CHECK (LENGTH(STUDENT_NAME) <= 4)
ALTER TABLE STUDENTS ADD CONSTRAINT CK_SEX CHECK (SEX IN ('男','女'))

  5、默认值约束

  1>、添加默认值约束

ALTER TABLE ORDERS MODIFY QUANTITY DEFAULT 1

  2>、删除默认值

ALTER TABLE ORDERS MODIFY QUANTITY DEFAULT NULL

Oracle 11g系列:约束的更多相关文章

  1. Oracle 11g系列:数据表对象

    Oracle数据库的下一层逻辑结构并非数据表,而是表空间.每个数据表都属于唯一的表空间. 1.Oracle表空间 与数据表相同,Oracle表空间是一个逻辑对象,而非物理对象,是数据库的组成部分.当使 ...

  2. Oracle 11g系列:SQL Plus与PL/SQL

    SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...

  3. Oracle 11g系列:函数与存储过程

    1.函数 Oracle中的函数分为两类:系统函数和自定义行数.对于自定义函数,函数的传入参数可以没有,如果有,一定要明确其数据类型.函数传入参数不能在函数内部进行修改.函数必须有返回值,并且返回值必须 ...

  4. Oracle 11g系列:视图

    视图是数据库中特有的对象,视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.Oracle中有4种视图:关系视图.内嵌视图.对象视图和物化视图. 1.关系视图 1>.创 ...

  5. Oracle 11g系列:数据库

    1.创建Oracle数据库 创建Oracle数据库的最常用工具为Database Configuration Assistant(数据库配置助手),依次选择[开始]|[所有程序]|[Oracle-Or ...

  6. [统计信息系列7] Oracle 11g的自动统计信息收集

    (一)统计信息收集概述 在Oracle 11g中,默认有3个自动任务,分别是:自动统计信息收集.SQL调优顾问.段空间调整顾问,查看方法如下: SQL> SELECT CLIENT_NAME,T ...

  7. SQL SERVER 2008向ORACLE 11G迁移示例

    来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL ...

  8. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  9. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

随机推荐

  1. 可变长度的Fibonacci数列

    原题目: Write a recursive program that extends the range of the Fibonacci sequence.  The Fibonacci sequ ...

  2. 转行IT行业的心路历程3

    16年丝袜生意很差的一年,老板的态度也不好,大唐本地人太歧视外地人了.而且我干的不开心没有前途,不能体现自我价值,无论你怎么努力. IT技术行业却不是这样,只要你努力肯学习,一定会有回报的. 在16/ ...

  3. VIM(四) C语言开发插件设置

    http://blog.csdn.net/guolb57/article/details/7013076

  4. java-内省与javabean

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...

  5. VHDL生成的ngc文件被verilog的工程调用的问题

    1. 问题的提出 工程a是一个soft core,用VHDL写的,综合的时候去掉了"Add I/O buffers" ,并将-iob(Pack I/O Registers into ...

  6. 【C-数组】

    一.一维数组 ①.定义方式 类型说明符 数组名 [常量表达式]; 如:int array[10]; 注意: 1) 数组的类型实际上是指数组元素的类型.对于同一个数组,其所有元素的数据类型都是相同的. ...

  7. C#函数式编程之可选值

    在我们的实际开发中已经会遇到可空类型,而在C#中自从2.0之后就提供了可空类型(Nullable<T>),普通的值类型是不可以赋值为NULL,但是在类型的后面加上问号就变成了可空类型,这样 ...

  8. ORM查询语言(OQL)简介--高级篇(续):庐山真貌

    相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...

  9. 解决Activator X for bundle Y is invalid 以及 Activator not found

    如果没有发现编译期异常(就是导航栏项目上有红叉,红感叹号),那么Activator X for bundle Y is invalid和Activator not found这两个异常通常发生在ecl ...

  10. UWP的一种下拉刷新实现

    简介 我们最近实现了一个在UWP中使用的下拉刷新功能,以满足用户的需求,因为这是下拉刷新是一种常见的操作方式,而UWP本身并不提供这一机制. 通过下拉刷新这一机制,可以让移动端的界面设计变得更加简单, ...