程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle基礎 (八) 數據完整性,oracle完整性

Oracle基礎 (八) 數據完整性,oracle完整性

編輯:Oracle教程

Oracle基礎 (八) 數據完整性,oracle完整性


一、數據完整性

  數據完整性要求數據庫中的數據具有准確性。准確性是通過數據庫表的設計和約束來實現的。為了實現數據完整性,數據庫需要做兩方面的工作:

  • 確保每行的數據符合要求。
  • 去報沒咧的數據符合要求。

  為了實現以上要求,Oracle提供了一下4種類型的約束(Constraint)。

  

  1、實體完整性約束

  實體完整性要求表中的每一行數據都反映不同的實體,不能存在相同的數據行。通過主鍵約束,唯一約束來實現實體完整性。

  (1)主鍵約束:

  表中的一列或者紀略組合的值能用來唯一的表示表中的每一行,這樣的一列或者多列的組合叫做表的主鍵。

  主鍵自帶唯一性,並且不能為空,一個表只能有一個主鍵,主鍵確保了表中數據行的唯一,同一張表中,可以使用多個列共同作為主鍵。在選擇主鍵時,應遵循兩個原則,最少性和穩定性。

  (2)唯一約束:

  保證數據行中的某一列的數據是唯一的,不重復的。這樣可以添加唯一約束。

  唯一約束和主鍵的區別:

  • 主鍵不能為空,唯一可以為空,但只允許有一個空值。
  • 主鍵一張表中只有一個,而唯一可以有多個。
  • 主鍵可以由多個表來組成,唯一只能是單列。
  • 主鍵可以作為其他表的外鍵,唯一不可以。

  

  2、域完整性:

  與完整性是指給定咧的輸入的有效性。通過數據類型、檢查約束、輸入格式、外鍵約束、默認值、非空約束等方法來實現。

  

  3、引用完整性:

  引用完整性是指為兩個表中存在一定的聯系,從而保證數據的完整性。例如:班級和學生,學生所在班級一定是在班級表中所存在的,不然就會出現不准確。引用完整性我們可以通過外鍵約束來實現。

 

  4、自定義完整性:

  用戶自己定義約束規則。主要通過存儲過程和觸發器對象來實現。

 

二、添加約束

  在創建表時,我們可以再字段後添加各種約束。這裡分為列級定義和表級定義:

  1、列級定義

  列級定義是指在定義列的同時定義定義約束。

  如在t_class表定義主鍵和唯一約束  

--創建班級表
CREATE TABLE t_class
(
  cid NUMBER CONSTRAINT pk_cid PRIMARY KEY,         --為cid添加主鍵約束
  cname VARCHAR2(20) constraint uq_sortname UNIQUE  --為cname添加唯一約束
)

  說明:在列級定義時,加不加constraint pk_department都是可以的,區別是不加的話,系統會自動分配一個主鍵約束名稱,可讀性差。

  2、表級定義

  表級定義是指在定義了所有列後,再定義約束。需要注意:not null只能在列級上定義。

  以在建立學生和班級表時定義主鍵約束和外鍵約束為例:  

--創建學生表
create table t_student(
    stuID number(4),
    stuname varchar2(20) NOT NULL,
    stupass varchar2(20) NOT NULL,
    cid NUMBER NOT NULL,
       constraint uq_username UNIQUE(stuname),  --創建唯一約束
       constraint ck_userpass Check(LENGTH(stupass) > 3),  --創建檢查約束(密碼長度大於3位)
    constraint pk_uid primary key(stuID), --主鍵約束
    constraint fk_cid foreign key(cid) references t_class(cid) --外鍵約束
  );

   

  3、創建表後,我們也可以在已經建好的表上添加約束,需要使用ALTER TABLE語句。

  語法:ALTER TABLE ADD CONSTRAINT 約束名 約束類型 具體的約束說明。  

ALTER TABLE t_student
    ADD CONSTRAINT uq_username UNIQUE(stuname)  --創建唯一約束
    ADD CONSTRAINT ck_userpass Check(LENGTH(stupass) > 3)   --創建檢查約束(密碼長度大於3位)
  ADD CONSTRAINT pk_uid primary key(stuID) --主鍵約束
  ADD CONSTRAINT fk_cid foreign key(cid) references t_class(cid) --外鍵約束

 

三、刪除約束

  語法:ALTER TABLE DROPCONSTRAINT 約束名   

ALTER TABLE t_student
    DROP CONSTRAINT PK_UID

 

四、查看約束

  查看T_STUDENT表中所有的約束。注意:這裡的表明必須全大寫否則查不到結果。

SELECT * FROM USER_CONSTRAINTS 
WHERE table_name = 'T_STUDENT'

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved