• (5)Oracle基础--约束


    · 约束的作用

      <1> 定义规则

      <2> 确保数据的完整性

    · 约束

      <1> 非空约束

          ① 创建表时为字段添加非空约束

            CREATE TABLE table_name (

              column_name data_type NOT NULL... );

          ② 为已存在的表字段添加非空约束

            ALTER TABLE table_name MODIFY column_name data_type NOT NULL;

          ③ 删除已存在的表字段的非空约束

            ALTER TABLE table_name MODIFY column_name data_type  NULL;

       <2> 主键约束

          作用:  确保表中每条记录的唯一性

          设置为主键的字段必须非空,唯一,且一张表中只能有一个主键,但是一个主键也可以由多个字段组成,称为联合主键.  

          ① 创建表时设置主键约束

            CREATE TABLE table_name(

              column_name data_type PRIMARY KEY,  ...  );

            或        

             CREATE TABLE table_name(

              column_name data_type ,  ...

              CONSTRAINT constraint_name PRIMARY KEY(column_name1,column_name2....) );

            P:第二种方式设置的约束称为表级约束,可以设置联合主键.

               可以从数据字典user_constraints中查看某个表的约束信息.

     

          ② 在已存在的表中添加主键约束

            ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name1,column_name2 , ...); 

            (注意: 添加主键时,必须确保此字段下的数据都是非空且唯一的)

          ③ 修改主键约束的名称

            ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name TO new_constraint_name; 

          ④ 删除主键约束      

            ALTER TABLE table_name DROP CONSTRAINT constraint_name ;

            或

            ALTER TABLE table_name DROP PRIMARY KEY [CASCADE] ;        

            P: 禁用/启用 约束

            ALTER TABLE table_name DISABLE/ENABLE CONSTRAINT constraint_name ;

       <3> 外键约束

          ① 创建表时设置外键约束    

            CREATE TABLE table1 (

              column_name data_type REFERENCES table2 (column_name)... );

            P: 一般称table1为从表,table2为主表,

            注意:  1. 设置外键时,引用的主表的字段必须是主键;

                 2. 主外键必须是同一个数据类型;

                 3. 外键字段的值必须来自对应的主键的值,或者为NULL; 

            或

            CREATE TABLE table1(

              column_name data_type , ...

              CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES table2 (column_name) [ON DELETE CASCADE] );          

          ② 在已存在的表中添加外键约束

            ALTER TABLE table1  ADD CONSTRAINT constraint_name

            FOREIGN KEY (column_name) REFERENCES table2(column_name) [ON DELETE CASCADE];

          ③ 删除外键约束

            ALTER TABLE table_name DROP CONSTRAINT constraint_name ;

     

     

       <4> 唯一约束  

          ① 唯一约束与主键约束的区别:

            1. 主键约束必须唯一且不能为NULL,唯一约束允许有一个NULL;

            2. 一张表中主键约束只能有一个,而唯一约束可以有多个;

          ② 创建表时设置唯一约束   

            CREATE TABLE table_name(

              column_name data_type UNIQUE , ... );

            或    

            CREATE TABLE table_name(

              column_name data_type , ...

              CONSTRAINT constraint_name UNIQUE(column_name));     

          ③ 在已存在的表中添加唯一约束

            ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);

          ④ 删除唯一约束

              ALTER TABLE table_name DROP CONSTRAINT constraint_name ; 

     

       <5> 检查约束

          作用: 使表中的值更具有实际意义

          ① 创建表时设置检查约束

            CREATE TABLE table_name(

              column_name data_type CHECK(expressions), ... );

            或

            CREATE TABLE table_name(

              column_name data_type , ...

              CONSTRAINT constraint_name CHECK(expressions));

          ② 在已存在的表中添加检查约束

            ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(expressions);

            ③ 删除检查约束

            ALTER TABLE table_name DROP CONSTRAINT constraint_name ;

     

    · 小结

       <1> 主键约束一张表中只能有一个,但是一个主键可以由多个约束组成;

       <2> 外键约束是唯一一个涉及两个表之间的约束;

       <3> 只有非空约束只能在列级设置,不能再表级设置,且非空约束没有名称;

       <4> 可以通过user_constraints数据字典查看约束的名称.

    作者:caobotao
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
    作者:caobotao
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    final关键字
    多态
    java特性-封装
    super的使用
    ==和equals的区别
    面向对象的三大特征
    this和static的用法
    如何一步步使用国内yum源一键安装openstack-ocata版本基于centos7
    Zabbix 4.2 安装
    自动化运维神器-ansible
  • 原文地址:https://www.cnblogs.com/caobotao/p/4965104.html
Copyright © 2020-2023  润新知