SQL基础-- 约束 CONSTRAINT

               

--=============================

--SQL基础--> 约束(CONSTRAINT)

--=============================

 

一、几类数据完整性

    实体完整性:表中记录不重复(任何两条记录不全等)并且每条记录都有一个非空主键

    域完整性:表中字段值必须与字段数据类型、格式、有效范围相吻合

    参照完整性:不能引用不存在的值

    自定义完整性:根据特定业务领域定义的需求完整性

   

    保证数据完整性的几种常用方法

       约束(最常用)

       过程

       函数

       触发器

      

       实体完整性:primary keyunique、索引(index)

       域完整性:checkforeign keynot null、数据类型

       参照完整性:foreign key

       自定义完整性:根据业务选用相应的约束类型

 

二、约束

    约束是表、列级的强制规定、是防止那些无效或有问题的数据输入到表中。当对该表进行DML

    操作时,如果操作违反约束条件或规则,ORACLE就会拒绝执行,并给出提示。

 

    约束放置在表中,以下五种约束:

       NOT NULL          非空约束C     指定的列不允许为空值

       UNIQUE             唯一约束U     指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的

       PRIMARY KEY       主键约束P     唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束

       FOREIGN KEY       外键约束R     一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列

       CHECK              条件约束C     指定该列是否满足某个条件

 

    约束命名规则

       如果不指定约束名Oracle server 自动按照SYS_Cn 的格式指定约束名,也可手动指定,

       推荐的约束命名是:约束类型_表名_列名。

      

       NNNOT NULL          非空约束,比如nn_emp_sal

       UKUNIQUE KEY         唯一约束

       PKPRIMARY KEY       主键约束

       FKFOREIGN KEY       外键约束

       CKCHECK             条件约束

      

    何时创建约束:

       建表的同时

       建表之后

 

    可以在表级或列级定义约束

       列级约束:只能引用一个列并且它属于列定义的一部分,可定义成任意类型的完整性约束。

       表级约束:可引用一个或多个列,并且它属于表定义的一部分,可定义除NOT NULL外的其它约束。

 

    可以通过数据字典视图查看约束

       user_constraints

       dba_constraints

       all_constraints

       user_cons_columns   列级上的约束

       dba_cons_columns    列级上的约束

 

 

    建表时约束定义的基本格式:

       字段定义constraint 约束名约否类型(字段名)-->unique,primary key,check

       字段定义constraint 约否名foreingn key (字段名)references 表名(字段名)--->foreign

 

三、建表时约束定义

 

    1.定义各种不同的约束

       --创建一个用于作外键的表tb_dept

           SQL> CREATE TABLE tb_dept

             2  (

             3      deptno NUMBER(4) PRIMARY KEY,

             4      deptname VARCHAR2(20),

             5      loc VARCHAR(50)

             6  );

 

       --建表时创建约束,没有指定约束名,则系统将自动命名约束名

           SQL> CREATE TABLE tb_constraint_1

             2  (

             3      empno NUMBER PRIMARY KEY,                    --主键约束

             4      ename VARCHAR2(20) NOT NULL,                 --非空约束

             5      email VARCHAR2(60) UNIQUE,                   --唯一约束

             6      sal   NUMBER(5) CHECK(sal>1500),             --核查约束

             7      deptno NUMBER(4) REFERENCES tb_dept(deptno)  --外键约束

             8  );

      

       --建表时指定了约束名

           SQL> CREATE TABLE tb_constraint_2

             2  (

             3      empno NUMBER CONSTRAINT pk_tb_cons2_empno PRIMARY KEY,

             4      ename VARCHAR2(20) CONSTRAINT nn_tb_cons2_empno NOT NULL,

             5      email VARCHAR2(60) CONSTRAINT un_tb_cons2_email UNIQUE,

             6      sal   NUMBER(5) CONSTRAINT ck_tb_cons2_sal CHECK(sal>1500),

             7      deptno NUMBER(4) CONSTRAINT fk_tb_cons2_dept REFERENCES tb_dept(deptno)

             8  );

          

    2.查看约束的定义信息

       --查看表的约束

           SQL> SELECT owner,constraint_name,constraint_type,table_name,status,deferrable,validated 

             2  FROM user_constraints

             3  ORDER BY table_name;

 

           OWNER           CONSTRAINT_NAME      C TABLE_NAME             STATUS   DEFERRABLE     VALIDATED

           ------------- ------------------- - -------------------- -------- -------------- ---------

           ROBINSON        SYS_C005543          C TB_CONSTRAINT_1        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        SYS_C005545          P TB_CONSTRAINT_1        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        SYS_C005546          U TB_CONSTRAINT_1        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        SYS_C005544          C TB_CONSTRAINT_1        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        SYS_C005547          R TB_CONSTRAINT_1        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        UN_TB_CONS2_EMAIL   U TB_CONSTRAINT_2        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        PK_TB_CONS2_EMPNO   P TB_CONSTRAINT_2        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        NN_TB_CONS2_EMPNO   C TB_CONSTRAINT_2        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        CK_TB_CONS2_SAL     C TB_CONSTRAINT_2        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        FK_TB_CONS2_DEPT    R TB_CONSTRAINT_2        ENABLED  NOT DEFERRABLE VALIDATED

           ROBINSON        SYS_C005542          P TB_DEPT                  ENABLED  NOT DEFERRABLE VALIDATED

 

       --查看列的约束

           SQL> SELECT * FROM user_cons_columns;

 

           OWNER           CONSTRAINT_NAME           TABLE_NAME                COLUMN_NAME       POSITION

           --------------- ---------------------- ---------------------- --------------- ----------

           ROBINSON        FK_TB_CONS2_DEPT          TB_CONSTRAINT_2           DEPTNO                   1

           ROBINSON        CK_TB_CONS2_SAL           TB_CONSTRAINT_2           SAL

           ROBINSON        UN_TB_CONS2_EMAIL         TB_CONSTRAINT_2           EMAIL                    1

           ROBINSON        NN_TB_CONS2_EMPNO         TB_CONSTRAINT_2           ENAME

           ROBINSON        PK_TB_CONS2_EMPNO         TB_CONSTRAINT_2           EMPNO                    1

           ROBINSON        SYS_C005542                TB_DEPT                     DEPTNO                   1

           ROBINSON        SYS_C005547                TB_CONSTRAINT_1           DEPTNO                   1

           ROBINSON        SYS_C005544                TB_CONSTRAINT_1           SAL

           ROBINSON        SYS_C005546                TB_CONSTRAINT_1           EMAIL                    1

           ROBINSON        SYS_C005543                TB_CONSTRAINT_1           ENAME

           ROBINSON        SYS_C005545                TB_CONSTRAINT_1           EMPNO                    1

   

    3.定义符合主键约束

       --定义复合主键

           SQL> CREATE TABLE tb_constraint_3

             2  (

             3      empno NUMBER,

             4      ename VARCHAR2(20),

             5      email VARCHAR2(20) UNIQUE,

             6      CONSTRAINT pk_tb_cons3_empno_ename PRIMARY KEY(empno,ename)

            

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/uffvhj/article/details/86618123