Oracle的建表約束


當我們創建表的時候,同時可以指定所插入數據的一些規則,比如說某個字段不能為空值,某個字段的值(比如年齡)不能小於零等等,這些規則稱為約束。約束是在表上強制執行的數據校驗規則.
Oracle 支持下面五類完整性約束:
NOT NULL 非空
UNIQUE Key 唯一鍵
PRIMARY KEY 主鍵
FOREIGN KEY 外鍵
CHECK 自定義檢查約束

 

Oracle使用SYS_Cn格式命名約束,也可以由用戶命名
創建約束的時機
在建表的同時創建
建表后創建
約束從作用上分類,可以分成兩大類:
表級約束:可以約束表中的任意一列或多列。可以定義除了Not Null以外的任何約束。
列級約束:只能約束其所在的某一列。可以定義任何約束。


約束簡介
約束用於確保數據庫數據滿足特定的商業邏輯或者企業規則,如果定義了約束,並且數據不符
合約束,那么DML操作(INSERT、UPDATE、DELETE)將不能成功執行。約束包括NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五種類型
定義約束
列級約束:
column [CONSTRAINT constraint_name] constraint_type
表級約束:
column ,...,
[CONSTRAINT constraint_name] constraint_type (column,...)
1.定義NOT NULL約束
NOT NULL 約束只能在列級定義,不能在表級定義
例:
CREATE TABLE emp01(
eno INT NOT NULL,
name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL,
salary NUMBER(6,2)
);

 

列級約束: 從形式上看,在每列定義完后馬上定義的約束,在逗號之前就定義好了。
carete table parent(c1 number primary key );
create table child (c number primary key , c2 number references parent(c1));

表級約束: 從形式上可以看出與列級約束的區別了吧。
create table child( c number , c2 number , primary key (c2), foreign key(c2) references parent(c1));


1主鍵約束( PRIMARY KEY)

主鍵約束是數據庫中最重要的一種約束。在關系中,主鍵值不可為空,也不允許出現重復,即關系要滿足實體完整性規則。
主鍵從功能上看相當於非空且唯一
一個表中只允許一個主鍵
主鍵是表中能夠唯一確定一個行數據的字段
主鍵字段可以是單字段或者是多字段的組合
Oracle為主鍵創建對應的唯一性索引

建議命名
約束_表名_字段 可以保證唯一性。 如果太長,可用縮寫。
同一字段可以有多個約束,但是約束之間不要沖突


主鍵可用下列兩種形式之一定義
主鍵子句
在表的定義中加上如下子句 primary key(列)
主鍵短語
在主屬性的定義之后加上primary key字樣。
上述形式Oracle會自動命名約束,可自己給約束起名
create table t3(
id number(4),
constraint t3_pk primary key(id)
)

 

create table sxtstu01(
sid number(10) primary key,
sname varchar2(50) not null
)

create table sxtstu02(
sid number(10),
sname varchar2(50) not null,
constraint pk_sid_test primary key(sid)
)

create table sxtstu03(
sid number(10),
sno varchar2(10),
sname varchar2(50) not null,
constraint pk_sid_test01 primary key(sid,sno)
)

 

2.非空約束(NOT NULL)
確保字段值不允許為空
只能在字段級定義

CREATE TABLE employees(
employee_id NUMBER(6),
name VARCHAR2(25) NOT NULL,
salary NUMBER(8,2),
hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL
)


create table sxtstu04(
sid number(10),
sno varchar2(10),
sname varchar2(50) not null,
birthday date constraint nn_sxtstu04_birthday not null,
constraint pk_sxtstu04_sid primary key(sid)
)


3.唯一性約束(UNIQUE)
唯一性約束條件確保所在的字段或者字段組合不出現重復值
唯一性約束條件的字段允許出現空值
Oracle將為唯一性約束條件創建對應的唯一性索引
CREATE TABLE employees(
id NUMBER(6),
name VARCHAR2(25) NOT NULL UNIQUE,
email VARCHAR2(25),
salary NUMBER(8,2),
hire_date DATE NOT NULL,
CONSTRAINT emp_email_uk UNIQUE(email)
);


4.CHECK 約束

Check約束用於對一個屬性的值加以限制
在check中定義檢查的條件表達式,數據需要符合設置的條件
create table emp3
( id number(4) primary key,
age number(2) check(age > 0 and age < 100),
salary number(7,2),
sex char(1),
constraint salary_check check(salary > 0)
)
在這種約束下,插入記錄或修改記錄時,系統要測試新的記錄的值是否滿足條件


5.外鍵約束( FOREIGN KEY)

外鍵是表中的一個列,其值必須在另一表的主鍵或者唯一鍵中列出
作為主鍵的表稱為“主表”,作為外鍵的關系稱為“依賴表”
外鍵參照的是主表的主鍵或者唯一鍵
對於主表的刪除和修改主鍵值的操作,會對依賴關系產生影響,以刪除為例:當要刪除主表的某個記錄(即刪除一個主鍵值,那么對依賴的影響可采取下列3種做法:
RESTRICT方式:只有當依賴表中沒有一個外鍵值與要刪除的主表中主鍵值相對應時,才可執行刪除操作。
CASCADE方式:將依賴表中所有外鍵值與主表中要刪除的主鍵值相對應的記錄一起刪除
SET NULL方式:將依賴表中所有與主表中被刪除的主鍵值相對應的外鍵值設為空值
FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
[ON DELETE [CASCADE|SET NULL]] 如省略on短語,缺省為第一中處理方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM