oracle 資料庫的約束
阿新 • • 發佈:2018-12-11
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
--學生表是依附於班級表中的資料才能產生的 ,班級不存在了,也就不存在屬於這個班的學生了
--意思就是說先有班級才能有對應班級的學生