• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • oracle數據庫表的約束constraints

    標簽: 約束

    1.數據完整性約束
    表的數據有一定的取值范圍和聯系,多表之間的數據有時也有一定的參照關系。
    在創建表和修改表時,可通過定義約束條件來保證數據的完整性和一致性。
    約束條件是一些規則,在對數據進行插入、刪除和修改時要對這些規則進行驗證,從而起到約束作用。
    2.完整性約束分類
    域完整性約束(非空not null,檢查check)

    實體完整性約束(唯一unique,主鍵primary key)

    參照完整性約束(外鍵foreign key)

    3.約束類型   說明

    主鍵約束(Primary Key)

    要求主鍵列數據唯一,并且不允許為空。主鍵可以包含表的一列或多列,如果包含表的多列,則需要在表級定義

    唯一約束(Unique)

    要求該列唯一,允許為空

    檢查約束(Check)

    某列取值范圍限制、格式限制等,如年齡的約束

    非空約束(not null)

    某類內容不能為空

    外鍵約束(Foreign Key)

    用于兩表間建立關系,需要指定引用主表的那列。外鍵通常用來約束兩個表之間的數據關系,定義外鍵的那張表稱為子表,另一張表稱為主表。

    在表的創建過程中,應該先創建主表,后創建子表。

    4.三種完整性約束的區別

    域完整性約束:字段約束

    實體完整性約束:行和行之間的約束

    引用完整性約束:表和表之間的約束


    5.創建約束的時機

    在建表的同時創建

    建表后創建

    6.約束從作用上分類,可以分成兩大類:

    表級約束:可以約束表中的任意一列或多列。可以定義除了Not Null以外的任何約束。

    列級約束:只能約束其所在的某一列。可以定義任何約束。

    7.命名規則推薦采用:約束類型_約束字段

    非空約束     NN_表名_列名

    唯一約束     UK_表名_列名

    主鍵約束     PK_表名

    外鍵約束     FK_表名_列名

    檢查約束     CK_表名_列名

    8.主鍵約束

    主鍵約束是數據庫中最重要的一種約束。在關系中,主鍵值不可為空,也不允許出現重復,即關系要滿足實體完整性規則。

    主鍵從功能上看相當于非空且唯一

    一個表中只允許一個主鍵

    主鍵是表中能夠唯一確定一個行數據的字段

    主鍵字段可以是單字段或者是多字段的組合

    Oracle為主鍵創建對應的唯一性索引

       --【主鍵約束】:唯一約束+非空約束
        CREATE TABLE STUDENT(
              SNO NUMBER(6) CONSTRAINTS PK_STUDENT PRIMARY KEY,--列級別約束
              SNAME VARCHAR2(20)
        );
        
        CREATE TABLE STUDENT(
              SNO NUMBER(6) PRIMARY KEY,--簡寫方式,主鍵名稱會自動生成
              SNAME VARCHAR2(20)
        );
          
        CREATE TABLE STUDENT(
              SNO NUMBER(6) ,
              SNAME VARCHAR2(20),
        CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO)--表級別約束
        );
        
        
        --聯合主鍵
        --聯合主鍵不能設置列級別約束
         CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20),
        CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO,SNAME)--表級別約束
        );  

    9.非空約束

    確保字段值不允許為空

    只能在字段級定義

    --【非空約束】 not null
        --學生姓名不能為空
        --非空約束只能設置列級別的約束
         CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20)  CONSTRAINTS NN_STUDENT_SNAME NOT NULL,--非空約束
        );  
        
        CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20) NOT NULL,--非空約束,簡寫方式
        ); 

    10.唯一性約束

    唯一性約束條件確保所在的字段或者字段組合不出現重復值

    唯一性約束條件的字段允許出現空值,且可以多個空值

    Oracle將為唯一性約束條件創建對應的唯一性索引

        --【唯一約束】
        --設置郵箱唯一,不能重復
        --唯一約束可以設置null值,并且可以重復插入多個null值
        CREATE TABLE STUDENT(
              SNO NUMBER(6),
              EMAIL VARCHAR2(30) CONSTRAINTS UK_STUDENT_EMAIL UNIQUE, --列級別約束
        );  
        
        CREATE TABLE STUDENT(
              SNO NUMBER(6),
              EMAIL VARCHAR2(30) ,
            --表級別約束
         CONSTRAINTS UK_STUDENT_EMAIL UNIQUE(EMAIL)--唯一約束
        );


    11.Check約束

    Check約束用于對一個屬性的值加以限制

    在check中定義檢查的條件表達式,數據需要符合設置的條件

    在這種約束下,插入記錄或修改記錄時,系統要測試新的記錄的值是否滿足條件

        --【檢查約束】 check
        DROP TABLE STUDENT PURGE;
        CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SEX CHAR(3) CHECK(SEX IN('男','女')),--列級別檢查約束
        );  
    
        CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SEX CHAR(3),
            --表級別約束
         CONSTRAINTS CK_STUDENT_SEX  CHECK(SEX IN('男','女'))       
        ); 


    12.外鍵約束

    外鍵是表中的一個列,其值必須在另一表的主鍵或者唯一鍵中列出

    作為主鍵的表稱為“主表”,作為外鍵的關系稱為“依賴表”

    外鍵參照的是主表的主鍵或者唯一鍵

    對于主表的刪除和修改主鍵值的操作,會對依賴關系產生影響,以刪除為例:當要刪除主表的某個記錄(即刪除一個主鍵值,那么對依賴的影響可采取下列3種做法:

    RESTRICT方式:只有當依賴表中沒有一個外鍵值與要刪除的主表中主鍵值相對應時,才可執行刪除操作。

    CASCADE方式:將依賴表中所有外鍵值與主表中要刪除的主鍵值相對應的記錄一起刪除

    SET NULL方式:將依賴表中所有與主表中被刪除的主鍵值相對應的外鍵值設為空值

    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

    [ON DELETE [CASCADE|SET NULL]] 如省略on短語,缺省為第一中處理方式。

    --【外鍵約束】
      --foregin key 
    	
    	--創建班級表
    	--【主表】
    	DROP TABLE CLAZZ PURGE;
    	CREATE TABLE CLAZZ(
    	   CLASSNO NUMBER(3) PRIMARY KEY, 
    		 CLASSNAME VARCHAR2(30) NOT NULL   
    	);
    	
    	--添加數據
    	INSERT INTO CLAZZ VALUES(201,'JAVA精英班');
    	INSERT INTO CLAZZ VALUES(202,'JAVA就業班');
    	INSERT INTO CLAZZ VALUES(203,'大數據班'); 
    	INSERT INTO CLAZZ VALUES(204,'H5前端班'); 
    	INSERT INTO CLAZZ VALUES(205,'UI設計班'); 
    	COMMIT;  
    	
    	SELECT * FROM CLAZZ;  
    	
    	--【外鍵約束】
    	--學生表【從表】
    	DROP TABLE STUDENT PURGE;
    	
    	CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20) NOT NULL,
              SEX CHAR(3),
              AGE NUMBER(3),
              ENTERDATE DATE,
              CLASSNO NUMBER(3) REFERENCES CLAZZ(CLASSNO),--列級別約束
              EMAIL VARCHAR2(30) UNIQUE,
            --表級別約束
    				 CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO),
    				 CONSTRAINTS CK_STUDENT_SEX  CHECK(SEX IN('男','女'))
        );  
    		
    		
    		DROP TABLE STUDENT PURGE;
    		CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20) NOT NULL,
              SEX CHAR(3),
              AGE NUMBER(3),
              ENTERDATE DATE,
              CLASSNO NUMBER(3),
              EMAIL VARCHAR2(30) UNIQUE,
            --表級別約束
    				 CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO),
    				 CONSTRAINTS CK_STUDENT_SEX  CHECK(SEX IN('男','女')),
    				 CONSTRAINTS FK_STUDENT_CLASSNO FOREIGN KEY(CLASSNO) REFERENCES CLAZZ(CLASSNO)
    				
        );
    
    		--級聯刪除 設置
    			CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20) NOT NULL,
              SEX CHAR(3),
              AGE NUMBER(3),
              ENTERDATE DATE,
              CLASSNO NUMBER(3),
              EMAIL VARCHAR2(30) UNIQUE,
            --表級別約束
    				 CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO),
    				 CONSTRAINTS CK_STUDENT_SEX  CHECK(SEX IN('男','女')),
    				 CONSTRAINTS FK_STUDENT_CLASSNO FOREIGN KEY(CLASSNO) REFERENCES CLAZZ(CLASSNO) ON DELETE CASCADE
    				
        );
    		
    		--級聯刪除 設置為空
    			CREATE TABLE STUDENT(
              SNO NUMBER(6),
              SNAME VARCHAR2(20) NOT NULL,
              SEX CHAR(3),
              AGE NUMBER(3),
              ENTERDATE DATE,
              CLASSNO NUMBER(3),
              EMAIL VARCHAR2(30) UNIQUE,
            --表級別約束
             CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO),
             CONSTRAINTS CK_STUDENT_SEX  CHECK(SEX IN('男','女')),
             CONSTRAINTS FK_STUDENT_CLASSNO FOREIGN KEY(CLASSNO) REFERENCES CLAZZ(CLASSNO) ON DELETE SET NULL
            
        );


    13.添加約束

    ALTER TABLE 表名  ADD CONSTRAINT 約束名  約束類型  具體的約束說明

        --添加約束
        ALTER TABLE STUDENT ADD CONSTRAINTS PK_STUDENT PRIMARY KEY(SNO);
        ALTER TABLE STUDENT ADD CONSTRAINTS UK_STUDENT_EMAIL UNIQUE(EMAIL);


    14.刪除約束

    ALTER TABLE 表名  DROP CONSTRAINT 約束名 

    可增加或刪除約束,但不能直接修改

        --刪除約束
        ALTER TABLE STUDENT DROP CONSTRAINTS PK_STUDENT;


    版權聲明:本文為huanyinghanlang原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/huanyinghanlang/article/details/78695566

    智能推薦

    刪除oracle數據庫的所有表

     第一步:查看當前用戶的缺省表空間 查詢得到的信息主要用于再次使用相同的表空間。刪除的原理是先刪除用戶,再次創建用戶。 授權: 這樣就能刪除整個數據庫的表了,因為使用的是Oracle SQL Develop,目前沒有發現可以一次性刪除的工具按鈕,不過PL/SQL客戶端工具可以全選右鍵DROP。 專業墻紙貼紙廚房用具裝飾出售,本人網店經營 博客對你有用記得訪問下哦,增加下訪問量,如有需要可以下單購買...

    #創建Oracle數據庫表所遇到的問題

    像mysql一樣設置主鍵自增 這個問題說真的真的是給我卡住了,處于各種懵逼狀態!由于以前公司用的數據庫都是mysql以為直接Auto_Increment 就可以了~設置主鍵自增,結果可想而知!!! 真的是太慘了,耽誤了自己很長時間才把這個問題解決,而且,由于用的數據庫是Navcat Premium,這個工具也導致踩了一個大坑!!!下面來記錄下這個問題 Oracle跟Mysql不一樣不能夠設置主鍵自...

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    猜你喜歡

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    Spark Streaming處理文件(本地文件以及hdfs上面的文件)

    標題介紹文件流之前先介紹一下Dstream 下面是來自官網一段的說明,Discretized Streams或DStream是Spark Streaming提供的基本抽象。它表示連續的數據流,可以是從源接收的輸入數據流,也可以是通過轉換輸入流生成的已處理數據流。在內部,DStream由一系列連續的RDD表示,這是Spark對不可變的分布式數據集的抽象(有關更多詳細信息,請參見Spark編程指南)。...

    《痞子衡嵌入式半月刊》 第 8 期

    痞子衡嵌入式半月刊: 第 8 期 這里分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農歷年分二十四節氣,希望在每個交節之日準時發布一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 7 期》 嘮兩句 今天是小滿,小滿節氣意味著進入了大幅降水的雨季。痞子...

    (C++)二叉樹的線索化 / 線索二叉樹

    好久不見,朋友們!雖然我知道沒人看我的博客,但我還是想叨逼叨一下。啊,好久沒編程了(其實也就一周沒編),但你們知道,程序員一天不編程那能叫程序員么???雖然我不是程序員哈哈哈哈哈,但還是要有基本素養嘛。 繼續寫二叉樹,給自己立一個flag,就是這幾天要寫完之前沒做完的幾道題,和二叉樹紅黑樹各種樹之類的~~雖然有這個flag,但我還是很實誠地遵從自己的內心,買了一張明天的電影票,等我回來告訴你們好不...

    Linux內存管理:分頁機制

    《Linux內存管理:內存描述之內存節點node》 《Linux內存管理:內存描述之內存區域zone》 《Linux內存管理:內存描述之內存頁面page》 《Linux內存管理:內存描述之高端內存》 《Linux內存管理:分頁機制》 《內存管理:Linux Memory Management:MMU、段、分頁、PAE、Cache、TLB》 目錄 1 分頁機制 1.1 為什么使用多級頁表來完成映射 ...

    精品国产乱码久久久久久蜜桃不卡