第十四章约束

 

约束

Constraint是一种保证数据完整性的规则。约束设置在单个字段或者多个字段组合上,写入这些字段的行数据必须要符合约束的规则

约束的五种类型:

 NOT NULL         非空约束,指定某列的所有行数据不能包含空值

 UNIQUE          唯一性约束,指定列或者列的组合的所有行数据必须唯一 

PRIMARY KEY        主键约束,表的每行的唯一性标识,指定列或者列的 

                             组合的所有行数据必须唯一 

 FOREIGN KEY        外键约束,在列及引用列上建立的一种强制依赖关系 

CHECK           检查性约束,在列上指定一个必须满足的条件    

约束命名规则 

• 约束也是数据库对象,必须按照命名规则命名,如果你不命名约束,Oracle服务器将用SYS_Cn格式产生一个名字,这里n是一个唯一的整数。 

• 除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。 

约束操作 

• 定义约束:约束通常在创建表的同时被创建; 

• 追加约束:在表被创建后,如果有需求也可以临时添加约束; 

• 启用及禁用约束:约束可以被临时禁用和启用。 

定义约束:

–约束既可以写在每个对应列的后面,称之为列级别约束,一个列级别约束只能作 

      用在一个列上; 

    –也可以写完所有列之后,再写约束,称之为表级别约束,一个表级别约束既可以 

      作用在一个列上,也可以作用在列的组合上; 

    –NOT NULL约束只能定义在列级别上联合主键或联合唯一性约束只能定义在表级 

      别上(限定在列的组合上的)其它约束既可以定义成表级别,也可以定义成列级别; 

    –列级别约束和表级别约束达到的作用完全相同,只是书写的位置不同

    –CONSTRAINT:约束的关键字;constraint_name:约束名字;constraint_type:约 

       束的类型;

• NOT NULL约束 :也叫非空约束,确保被约束列的所有行记录都不能为空值。只能定义在列级别上。 

• UNIQUE约束:也叫唯一约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,定义UNIQUE约束的列 (或列组合被称为唯一键。 

• 每个表可以有多个为UNIQUE约束。  

• UNIQUE约束允许输入空值,除非我们在相应的列上定义NOT  NULL 约束。 

 PRIMARY KEY约束:主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,并且确保作为主键一部分的列不能包含空值; 

• 每个表只能创建一个主键约束。

 

 

主键和唯一键的区别:

1,唯一性约束键默认没有not null约束,而主键默认有一个 not null,

2,一个表中最多只能有一个主键,可以有多个唯一键

通常把唯一标识一行的,流水号----主键

身份证--------唯一键

• FOREIGN KEY,也叫外键约束,外键确保了相关联的两个字段的关系: 

     –外键列的值必须在引用列值的范围内,或者为空; 

     –外键参照的是列必须是主键或者唯一键; 

• 主键表主键值被外键表参照时,主键表记录不允许被删除。 

• FOREIGN KEY: 定义在子表的列中 

• REFERENCES: 引用列所在的父表 

 

• 注

 –ON DELETE CASCADE:当父表中的行被删除时,子表中相依赖的行同时被删除;(级联) 

 –ON DELETE SET NULL:当父表的行被删除时,子表中相依赖的行被转换为空值; 

 –无ON DELETE CASCADEON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除。 

 

• CHECK约束,也叫检查性约束,确保某个列的所有行数据都必须满足的条件,如: 

     –sal NUMBER(82) CONSTRAINT dept_sal_min CHECK 

        (salary > 0) 

     –要求sal字段的所有行数据必须大于

    • 表达式不允许使用

     –伪列,例如:CURRVAL, NEXTVAL, LEVELROWNUM; 

     –可以调用SYSDATE, UID, USERUSERENV 函数; 

     –对其它记录其它值的查询。 

 

使用子查询创建表的时候,约束不会被继承过来,只是复制了一些表结构

追加约束 

• 也可以用ALTER TABLE语句为表: 

       –追加或删除约束,但不修改它的结构; 

       –启用或禁用约束; 

       –用MODIFY子句添加一个NOT NULL约束; 

• 追加约束,语法为: 

 

  ALTER TABLE table ADD [CONSTRAINT constraint] type (column); 

• 追加NOT NULL 约束 

 

 ALTER TABLE table 

        MODIFY (column [CONSTRAINT constraint]  NOT NULL); 

删除约束 

 

• 语法 

 ALTER TABLE table DROP PRIMARY KEY|UNIQUE(column) 

 |CONSTRAINT constraint [CASCADE]; 

• 在语法中: 

      –table 是表的名字 

      –column 是受约束影响的列的名字 

      –constraint 是约束的名字 

      –cascade 级联删除 

• 例:emp表中删除emp_mgr_fk约束 

 ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk; 

• 例:删除dept表上的PRIMARY KEY约束,并且删除相关联的在empdeptno上的FOREIGN KEY约束

 ALTER TABLE dept DROP PRIMARY KEY CASCADE; 

• DROP子句的CASCADE选项导致任何与其相依赖的约束也被删除。 

约束启用与禁用 

• 约束禁用 

     –如果有大批量数据导入时,我们可以采用禁用约束的方法, 

       主要的好处,首先效率高,另外有主外键约束的表之间导 

       入时,不用考虑导入的先后顺序。 

     –禁用约束语法: 

   ALTER TABLE table  DISABLE CONSTRAINT constraint [CASCADE]; 

     –应用CASCADE选项禁用相依赖的外键约束 

     –启用约束语法: 

  ALTER TABLE table  ENABLE CONSTRAINT constraint; 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值