zoukankan      html  css  js  c++  java
  • 表的约束

    oracle 在表上提供了五种约束

    1.not null

      定义在标的列上,表明该列必须要有值,不能为null

      可以在建立表的时候说明

      也可以在表建立以后修改为not null

      可以给约束指定名称

      如果不指定名称,数据库会给一个系统自动指定名称,SYS_C####

    scott@TEST>create table t1 (id number(4) not null ,name varchar(3) constraint t1_name not null);  //创建id列有not null约束,不指定名字。name列,指定名字
    
    
    Table created.
    
    scott@TEST>select CONSTRAINT_NAME,CONSTRAINT_type,TABLE_NAME,column_name from user_constraints natural join user_cons_columns;  //查看数据字典
    
    CONSTRAINT_NAME                                              CO TABLE_NAME                                                   COLUMN_NAME
    ------------------------------------------------------------ -- ------------------------------------------------------------ ------------
    SYS_C0011437                                                 C  T1                                                           ID
    T1_NAME                                                      C  T1                                                           NAME
    FK_DEPTNO                                                    R  EMP                                                          DEPTNO
    PK_DEPT                                                      P  DEPT                                                         DEPTNO
    PK_EMP                                                       P  EMP                                                          EMPNO

        也可通过alter来修改

    scott@TEST>create table t2 (id number(3));
    
    Table created.
    
    scott@TEST>alter table t2 modify (id not null);  //使用alter添加约束
    
    Table altered.

     2.唯一约束unique

      列的值不能重复

      可以为null

      是用索引来维护唯一的

      索引的名称和约束的名称相同

    scott@TEST>create table t1 (id number(5) unique,name varchar(5) constraint t1_name unique);  //创建id列不指定名字,使用系统命名。name列指定名字
    
    Table created.
    
    scott@TEST>select CONSTRAINT_NAME,CONSTRAINT_type,TABLE_NAME,column_name from user_constraints natural join user_cons_columns;  //查看数据字典
    
    CONSTRAINT_NAME                                              CO TABLE_NAME                                                   COLUMN_NAME
    ------------------------------------------------------------ -- ------------------------------------------------------------ ------------
    SYS_C0011439                                                 U  T1                                                           ID
    T1_NAME                                                      U  T1                                                           NAME
    FK_DEPTNO                                                    R  EMP                                                          DEPTNO
    PK_DEPT                                                      P  DEPT                                                         DEPTNO
    PK_EMP                                                       P  EMP                                                          EMPNO
    
    scott@TEST>select table_name,index_name,column_name from user_ind_columns;
    
    TABLE_NAME                                                   INDEX_NAME                                                   COLUMN_NAME
    ------------------------------------------------------------ ------------------------------------------------------------ ------------
    DEPT                                                         PK_DEPT                                                      DEPTNO
    EMP                                                          PK_EMP                                                       EMPNO
    T1                                                           SYS_C0011439                                                 ID
    T1                                                           T1_NAME                                                      NAME

      建立表之后指定unique约束

    scott@TEST>drop table t1 purge;
    
    Table dropped.
    
    scott@TEST>create table t1 (id number(3),name varchar(4));
    
    Table created.
    
    scott@TEST>alter table t1 add constraint u_id unique (id);  //使用alter增加unique约束
    
    Table altered.
    
    scott@TEST>Select table_name,index_name,column_name from user_ind_columns;
    
    TABLE_NAME                                                   INDEX_NAME                                           COLUMN_NAME
    ------------------------------------------------------------ ------------------------------------------------------------ ------------
    DEPT                                                         PK_DEPT                                              DEPTNO
    EMP                                                          PK_EMP                                               EMPNO
    T1                                                           U_ID                                                 ID
    

    3.check检测约束

    scott@TEST>create table t1(id number(4) constraint c_id check (length(id)>2),name varchar2(5));  //创建id列使用系统命名。
    
    Table created.
    
    scott@TEST>alter table t1 add constraint c_name check(length(name)>2);  //使用alter增加约束
    
    Table altered.
    
    scott@TEST>insert into t1 values(1,'aa');
    insert into t1 values(1,'aa')
    *
    ERROR at line 1:
    ORA-02290: check constraint (SCOTT.C_NAME) violated
    
    
    scott@TEST>insert into t1 values(111,'aaa');
    
    1 row created.

     4.primary key 主键约束

      一个表只能有一个主键

      主键要求唯一并且非空

      可以是联合主键,联合主键每列都要求非空

      主键能唯一地位一行,所以主键也叫逻辑rowid

      主键不是必须的,可以没有

      主键是通过索引实现的

      索引的名称和主键名称相同 

     5.foreign key 外键

      指定在表的列上

      引用本表其它列,或其它表的其它列

      被引用的列得有唯一约束或者主键约束,因为引用的是索引的键值,而不是真正的表

      目的是维护数据的完整性

      核心是一列是另外一列的子集,null除外 

    6.删除约束

      任何约束都可以用约束名称来删除

      alter table **** drop constraint ****;

      因为主键只能有一个,所以删除主键约束的时候也可以

      alter table **** drop primary key; 

      如果主键和唯一性约束被删除,自动建立的索引也会同时被清除

      not null 约束也可以用alter table modify 来删除

      删除有外键引用的主键或唯一约束的时候,外键也要被级连删除

      alter table **** drop primary key cascade;

      如果不加cascade,你删不了,报有外键在使用,不能删除。

      按约束的名称来删除约束(可以删除各种约束)

      alter table t1 drop constraint sys_c03033;

      非空约束的第二种删除方式

      alter table t1 modify (name not null);

      alter table t1 modify (name null);

      

  • 相关阅读:
    安全意识第二期丨小失误酿大祸,上班族请注意啦
    安全意识第一期丨网购退款失败,导致财、物两空?
    CTF挑战赛丨网络内生安全试验场第一季答题赛火热开启
    挑战世界级“人机大战”,更有万元奖金等你来拿
    【Web安全入门】三个技巧教你玩转XSS漏洞
    【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入
    想入门Web安全,这些基础知识都学会了吗?
    CTF必备技能丨Linux Pwn入门教程——PIE与bypass思路
    大学生网络安全竞赛开始报名啦
    「黑客必备技能」Python正则表达式详解
  • 原文地址:https://www.cnblogs.com/sangmu/p/6807022.html
Copyright © 2011-2022 走看看