Oracle 資料表約束

2021-10-14 02:45:38 字數 4180 閱讀 5728

2.2 唯一性約束

2.3 主鍵約束

2.4 外來鍵約束

3. 禁用和啟用約束

資料庫不僅僅是用來儲存資料,它還必須保證所儲存資料的正確性。如果資料不準確或不一致,那麼該資料表的完整性就可能受到了破壞,從而給資料庫本身的可靠性帶來問題。為了維護資料庫中資料的完整性,在建立表時常常需要定義一些約束

約束說明

非空約束

表示此欄位內容不許為空

唯一性約束

此列的內容不允許重複

主鍵約束

表示乙個唯一的標識,具有唯一性和非空性

外來鍵約束

用來約束兩個表中列之間的關係

檢查約束

使用者自行編寫設定的內容的檢查條件

2.1.1 設定非空約束

如果某些列的值時可有可無的,那麼可以定義這些列允許為null。

create

table books

( bookno number(4)

notnull

, bookname varchar2(30)

, author varhar2(10)

, saleprice number(9,

2), publisherno varchar2(4)

notnull

, publisherdate date

, isbn varchar2(20)

notnull

);

2.1.2 修改非空約束

在建立完錶後,也可以使用alter table … modify 語句為已經建立的表刪除或重新定義 not null約束。

alter

table books modify bookname not

null

;

2.1.3 刪除非空約束
alter

table books modify bookname null

;

唯一性約束是為了解決在一張表中設定除了主鍵所在列外,多個列都不允許重複資料的存在。

2.2.1 設定約束

建立表時設定約束

create

table members

( memno number(4)

notnull

, phone varchar2(20)

, email varchar2(40)

, qq varchar2(20)

constraint qq_uk unique

,-- 設定唯一性約束,qq_uk是約束名

constraint mem_pk primary

key(memno)

-- 設定memno列為主鍵,

);

如果唯一性約束的列有值,則不允許重複,但是可以插入多個null值,即改列的空值是可以重複的。

對現有的表新增唯一性約束

alter

table members add

constraint email_uk unique

(email)

;

2.2.2 刪除唯一性約束
alter

table members drop

constraint email_uk;

主鍵約束用於唯一地標識表中的每一行記錄。在乙個表中,最多只能有乙個主鍵約束,主鍵約束既可以有乙個列組成,也可以由兩個或多個列組成(聯合主鍵)。主鍵約束同時也具有非空約束的特性。

2.3.1 建立表的同時設定主鍵約束

create

table members

( memno number(4)

notnull

, phone varchar2(20)

, email varchar2(40)

, qq varchar2(20)

constraint qq_uk unique

,-- 設定唯一性約束,qq_uk是約束名

constraint mem_pk primary

key(memno)

-- 設定memno列為主鍵,

);

2.3.2 建立表之後新增主鍵約束
alter

table book add

constraint mem_pk primary

key(memno)

;

2.3.3 刪除主鍵約束
alter

table book drop

constraint mem_pk;

前面的三種約束都是在一張表中設定的,現在如果需要設定兩張關係表的約束,則可以通過外來鍵約束來完成。

2.4.1 設定外來鍵約束

-- 建立兩個新錶

create

table emp_temp as

select

*from emp;

create

table dept_temp as

select

*from dept;

-- 為dept_temp表的deptno設定主鍵;

alter

table dept_temp add

constraint dept_pk primary

key(deptno)

;-- 為emp_temp表的empno設定主鍵;

alter

table emp_temp add

constraint emp_pk primary

key(empno)

;-- 為emp_temp表的deptno列建立外來鍵約束

alter

table emp_temp add

constraint emp_dept_fk

foreign

key(deptno)

references dept_temp(deptno)

;

2.4.2 刪除具有外來鍵約束的表

刪除被引用表的資料前,應先刪除外來鍵表所對應的資料;

刪除被引用表前,應先將外來鍵表刪除。

可以使用關鍵字cascades constraint來強制刪除被引用表,**如下:

drop

table dept_temp cascade

constraint

;

2.4.3 刪除外來鍵約束
alter

table emp_temp drop

constraint emp_dept_fk;

約束建立之後,如果沒有經過特殊處理,該約束就一直起作用。但也可以根據實際需要,臨時禁用某個約束。當某個約束被禁用後,該約束就不再起作用了,但它還存在於資料庫中。

3.1 在定義約束時禁用

在使用create table或alter table語句定義約束時,如果使用關鍵字disable,則約束是被禁用的。

create

table stuinfo

( stucode varchar2(4)

notnull

, stuname varchar2(10)

notnull,/*

check約束即檢查約束,它的作用為對錶中的資料進行過濾,在更新資料時,資料

只有滿足指定的過濾條件,才可以更新成功,否則不能更新。

*/ age int

constraint age_ck check

(age>

0and age<

120)

disable

);

3.2 禁用已經存在的約束
alter

table books_1 disable

constraint book_pk;

3.3 啟用約束
alter

table books_1 enable

constraint book_pk;

3.4 刪除約束
alter

table books_1 drop

constraint book_pk;

Oracle 約束條件與資料表

1.建立班級資訊表,classes cid int 主鍵,cname varchar2 100 非空 唯一,intro varchar2 1000 使用insert語句插入5條資料 create table classes cid int constraint pk cid primary key,...

19 資料表 約束

非空約束 非空約束就是限制必須為某個列提供值。空 null 即不存在未知的情況。create table books bookno number 4 notnull 非空 bookname varchar2 30 isbn varchar2 30 notnull 使用 later table mod...

Oracle資料表建立 查詢 約束等操作

create table stuinfo 建立學員資訊表 stuno char 6 not null stuname varchar 2 not nul,stuage number 3,0 not null 新建一張表複製學員資訊表則是 create table stuinfo2 as select...