1. 程式人生 > >oracle 資料庫的約束

oracle 資料庫的約束

oracle 資料庫的 約束

什麼是約束: 通俗來說約束就是一種規則,目的就是為了保證資料庫中的資料的完整性和一致性的檢查機制。

oracle資料庫有五種型別的約束

第一種 約束: 主鍵約束(PRMARY KEY ) 作用:用來識別一個行的,添加了主鍵約束的列,具有唯一且非空的特性,一般主鍵會用來設定id的。

新增主鍵約束程式碼示例

--第一種新增方式
ALTER TABLE STUDENT ADD CONSTRAINT PK_STU_ID PRIMARY KEY(STU_ID);

--第二種新增方式
CREATE TABLE STUDENT(
    STU_ID  NUMBER(4) CONSTRAINT PK_STU_ID PRIMARY KEY,--行級定義
    STU_NAME VARCHAR2(10),
    STU_CLASS NUMBER(4)  
)
--第三種新增方式
CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(4),
    STU_CLASS NUMBER(4),
    CONSTRAINT PK_STU_ID PRIMARY KEY(STU_ID); --表級定義
)

第二種約束:唯一約束(UNIQUE) 作用: 確保定義了唯一約束的列中的值,不存在重複的值,但可以為NULL。

新增唯一約束程式碼示例

--第一種新增方式
ALTER TABLE STUDENT ADD CONSTRAINT UN_STU_NAME UNIQUE(STU_NAME);
--第二種新增方式
CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(4) CONSTRAINT UN_STU_NAME UNIQUE--行級定義

)
--第三種新增方式
CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(10),
    CONSTRAINT UN_STU_NAME UNIQUE(STU_NAME)--表級定義
)

第三種約束:非空約束(NOT NULL )  被定義了非空約束的列 值不能為 null 。

程式碼示例:

--第一種新增方式
ALTER TABLE STUDENT MODIFY STU_NAME NOT NULL;

--第二種新增方式
CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(4) NOT NULL--行級定義
)

第四種約束:檢查約束(CHECK)  定義了該約束的列,可以定義一個表示式,使用者輸入基於該業務邏輯的表示式,符合規則就執行DML(data manipulation language)語句,不符合就ROOLBACK回滾。

程式碼示例:

--第一種定義方式
ALTER TABLE STUDENT ADD CONSTRAINT CH_STU_SEX CHECK(STU_SEX = '男' OR STU_SEX = '女');

--第二種定義方式
CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(4),
    STU_SEX VARCHAR2(3) CONSTRAINT CH_STU_SEX CHECK -- 行級定義
)

--第三種定義方式

CREATE TABLE STUDENT(
    STU_ID NUMBER(4),
    STU_NAME VARCHAR2(4),
    STU_SEX VARCHAR2(3) ,
    CONSTRAINT CH_STU_SEX CHECK(STU_SEX) -- 表級定義
)


第五種約束:外來鍵約束(FOREIGN (主表列) REFERENCES(從表列)) 作用:用來強制兩個表之間的關係。定義了外來鍵的主表中的(一個列)值與對應的從表中的引用建(一個列)中的值相對應,如果從表中的引用建不存在該值,那麼主表INSERT INTO 該值的時候就會被約束(不能新增進主表);

外來鍵:將會引用到其它表(從表)中的列的資料,外來鍵定義在主表中的列,

引用建:被主表中的外來鍵鎖引用的列,該列必須是定義了唯一約束或主鍵約束的列才行

程式碼示例:

--定義方式
--定義一個學生表
CREATE TABLE STUDENT(
    STU_ID NUMBER(4) CONSTRAINT PK_STU_ID PRIMARY KEY,
    STU_NAME VARCHAR2(4) CONSTRAINT UN_STU_NAME UNIQUE,
    STU_CLASS NUMBER(4) CONSTRAINT UN_STU_CLASS UNIQUE
)
--定義一個班級表
CREATE TABLE T_CLASS(
    C_ID NUMBER(4) CONSTRAINT PK_C_ID PRIMARY KEY,
    C_CLASSNO NUMBER(4) CONSTRAINT UN_C_CLASS UNIQUE
)
--定義外來鍵約束
ALTER TABLE STUDENT ADD CONSTRAINT FK_STU_CLASS FORSIGN (STU_CLASS) REFERENCES(C_CLASSNO) ON DELETE CASCADE;
--級聯關係
--刪除從表資料的同時刪除對應的主表資料,刪除班級表中的資料的同時刪除對應的學生表的資料
--ON DELETE CASCADE 
-- ON DELETE SET NULL  刪除從表資料時將對應的主表資料設定為NULL

--學生表是依附於班級表中的資料才能產生的 ,班級不存在了,也就不存在屬於這個班的學生了
--意思就是說先有班級才能有對應班級的學生