oracle-數據的完整性簡介

1.  數據的完整性簡介

    就是正確性、準確性,包含三種:實體完整性、參照完整性、

用戶自定義完整性。Oracle中主要通過約束、觸發器、過程函數

實現的。 以下內容講通過約束實現數據完整性。

舉例兩個表:

學生(學號,姓名,系編號)

系(系編號,系名稱)

員工(編號,姓名,出生日期,工作日期)

那麼:

學號是主鍵列,其值不能錯誤,如不能負值,這就是實體完整性

系編號是外鍵,學生表的系編號參照系表,也就是說學生表的系編號的值必須在系表的系編號的值範圍內【或者爲空】,這就是參照完整性

員工表的出生日期一定需要小宇工作日期,這就是用戶自定義完整性

 

2.  維護數據的完整性,有not nulluniquecheckprimary keyforeign key五種。

    not null例如學生的姓名;unique例如學生的學號;primary key主鍵、foreign key外鍵、check可以按照用戶要求,進行自動檢查。

    unique不可以重複,但是可以爲空。

    primary key不可以重複,也不能爲空。

    一個表只能一個primary key,卻可以多個unique。 

    not null只能在列內定義,其他4種約束可以在列定義結束後,在表內定義

not null示例(這裏的not null約束由系統自動起名):

create table yg2(bh number(4) not null,xm varchar2(8));  

check示例:

create table yg3(bh number(4) not null  check (bh>0  and  bh<10000),   xm varchar2(8));

unique示例:

create table yg4(部門號 number(4) not null, 部門內號  number(4) ,   xm varchar2(8) , unique(部門號,部門內號) );

default的使用 

  create table gz_新員工  (bh number(4),xm varchar2(8),gz number(10) default 1000 ); //適用於沒有向列顯式的指定數值的情況。

 

primary key示例(此列不允許爲空,而且ORACLE會自動爲主鍵列創建索引,這裏的primary key約束由用戶顯式起名):

create table student(xh number(6)  constraint code_pk  primary key , xm varchar2(20));

foreign key示例(實現兩個表之間參照與被參照的關係,外鍵只能取主鍵已經有的值,這裏的foreign key由系統自動起名):

create table address (xh number(8) ,zz varchar2(50) , foreign key(xh) references student(xh));

試驗primary key和foreign key約束:

insert into student values(1,'張一');

insert into address values(1,'鄭州'); 

insert into address values(2,'鄭州'); 

(3)用戶的約束在user_constraints表、和user_cons_columns表中 

 select * from user_constraints;

 

實踐練習題目:

問題:

建立2個表,一個是StudentInformatino(學號sno,姓名

sname,年齡sage,性別smale,系編號

deptNo),一個是department(系編號deptno

系名稱deptname)。

 要求:

    每個表有主鍵。

    StudentInformation表建立外鍵。

    學生的姓名不能爲空。

    學生的年齡要在1850之間。

    學生的性別必須是男女之一,默認是男。

    StudentInformation表的deptno列,要參照department表的

deptno列。

3.2 給已有的表添加約束:

除了添加not null需要使用modify命令,其他都是類似alter table tablename  add  CONSTRAINTS的方式。

上面例子,允許stuInfo中的姓名可以爲空:alter table stuinfo modify sname null;

允許stuInfo中的姓名不能重複:alter table stuinfo  add constraints  sname_unique  unique(sname) ;

要求department的系名稱列的內容,必須大於4個字符長度:alter table 

department add constraints  deptName_check  check(length(deptName)>4);

3.3 刪除約束:

alter table 表名 drop constraint 約束名;

alter table department drop constraint deptName_check;  -- 刪除剛纔建立的department表上的deptName_check 約束

刪除主鍵語句:alter table 表名 drop primary key;

   如果出錯:ORA-02273: 此唯一/主鍵已被某些外鍵引用,可以:alter table department drop primary key cascade;

   如果刪除一個主鍵被引用的表,可以:drop table 表名 cascade constraints;

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章