约束是表中列的属性,用来维护数据结构完整性的一种手段
约束的种类:
NOT NULL
UNIQUE
PARIAMRY KEY
FOREIGN KEY
CHECK

enble validate 检查现有数据和新数据是否符合约束
enable novlidate 检查新数据是否符合约束
disable validate 给表加锁
disable novalidate

创建表的时候带有约束信息:
create table e (empno number(4) constraint pk_e_empno(约束名) primary key,
ename varchar2(10) not null, not null只能在列级别
email varchar2(30),
constraint uk_e_email unique (email)); 约束写在后面为表级别约束,要指定列名

查看约束信息:
select constraint_name,
constraint_type,
SEARCH_CONDITION,
R_CONSTRAINT_NAME
from user_constraints
where table_name='E';

select constraint_name,column_name from user_cons_columns
where table_name='E';

添加约束:
alter table e add (sal number(7,2),deptno number(2));

alter table e add constraint ck_e_sal check (sal>999 and sal is not null);

alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno);

注意:not null 约束只能在列级别指定不能在表级别指定!
alter table e modify (ename varchar2(10) constraint nn_e_ename not null);

select table_name,constraint_type from user_constraints where constraint_name='PK_DEPT';

select table_name,column_name from user_cons_columns
where constraint_name='PK_DEPT';

insert into e values (1,'X1','x1@uplooking.com',1000,10);
insert into e values (2,'X2','x2@uplooking.com',2000,20);
insert into e values (3,'X3','x3@uplooking.com',2000,40);
commit;

测试数据依赖关系:
delete dept where deptno=40;

删除约束:
alter table e drop constraint fk_e_deptno;

外键约束的两种特殊情况(主键删除有级联)
alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno) on delete set null;

alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno) on delete cascade;

约束的状态:
select constraint_name,
status
from user_constraints
where table_name='E';

禁止约束:
alter table e modify constraint UK_E_EMAIL disable;

启用约束:
alter table e modify constraint UK_E_EMAIL enable;

删除外键,重新建立父子关系(子表为e,父表为d,d表拷贝dept表数据):
alter table e drop constraint fk_e_deptno;

create table d as select * from dept;

alter table d add constraint pk_d_deptno primary key (deptno);

alter table e add constraint fk_e_deptno foreign key(deptno) references d (deptno);

父子关系建立后对父表结构修改的影响:
alter table d drop (deptno);
ORA-12992: cannot drop parent key column

强制删除父表主键:
alter table d drop (deptno) cascade constraints;

oracle 约束的更多相关文章

  1. ORACLE约束总结

    你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了.ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本 ...

  2. 【Oracle】Oracle约束的总结

    你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了.ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本 ...

  3. oracle约束约束状态和设计习惯

    oracle约束状态有几个项目,会让人迷惑,分别是: enable/disable--是否启用/禁用 validate/invalidate--确认/不确认 deferrable/not deferr ...

  4. 转 ORACLE约束总结

    https://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html 你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几 ...

  5. Oracle约束(Constraint)详解

    概述 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到程序逻辑 ...

  6. Oracle 约束类型

    在Oracle中的约束类型:NOT NULLUNIQUE KeyPRIMARY KEYFOREIGN KEYCHECK create table emp--创建表格 ,注意约束( empno numb ...

  7. Oracle约束操作

    约束的概念: 约束是在表中定义的用于维护数据库完整性的一些规则.通过为表中的字段定义约 束,可以防止将错误的数据插入到表中. 注意: 1.如果某个约束只作用于单独的字段,既可以在字段级定义约束,也可以 ...

  8. 十五、oracle 约束

    一.维护数据的完整性数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并 ...

  9. [Oracle]约束(constraint)

    (一)约束的概念 在Oracle中,可以通过设置约束来防止无效数据进入表中.Oracle一共有5种约束: 主键约束(primary key) 外键约束(foreign key) 唯一性约束(uniqu ...

  10. Oracle约束、索引

    Oracle中的约束有五种,分别为: 非空:not null 主键:primary key 外键:foreign key 唯一:unique 检查:check 在数据字典视图 user_constra ...

随机推荐

  1. Flex 仿Winxp左侧菜单

    呆毛放出,源码暂时不能公布,一直比较喜欢winxp的左侧菜单样式,以前也用xslt实现过,但总是达不到完美,没想到FLex轻松做到了这一点,几乎和winxp一模一样.

  2. extjs gride 显示序号

    在使用Extjs框架时,有时为了在信息列表中显示数据项的序号,这就要构造一些方法来显示序号,其方法有两种,具体如下: 1.方法一 对 Ext.grid.PageRowNumberer 进行扩展,详细代 ...

  3. python中operator.itemgetter

    直接上例子: rs=  [...     {...       "datetime": "Mon, 31 Aug 2015 23:00:00 GMT",...  ...

  4. 学习练习 使用Servlet实现用户注册功能

    package com.hanqi.www; import java.io.IOException; import javax.servlet.ServletException; import jav ...

  5. No.011 Container With Most Water

    11. Container With Most Water Total Accepted: 86363 Total Submissions: 244589 Difficulty: Medium Giv ...

  6. easyui+ashx 动态初始化datagrid(动态列头)

    效果图: 1:简单初始化 JSON格式数据如下(后台自己构建,后台代码略): {"total":6,"columns":[{"field": ...

  7. Tomcat启动过程(三):从SocketProcessor到Container

    1.Http11Protocol中的内部类Http11ConnectionHandler,执行其process方法 if (processor == null) { processor = creat ...

  8. Linux redis 配置文件

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...

  9. Yii 操作提示框实现

    如图: html  +  css   代码: 这是 YII  模板的写法 欢迎使用Yii <style> div.success{ background: #C5FBBD; border: ...

  10. Lua 练习中的Bug 以及日志

    使用 Lua 中的table.getn获得数组的table的长度:运行失败-- > t ={1,2,3 } > print(table.getn(t)) stdin:1: attempt ...