一、概述
創(chuàng)建表的時(shí)候可以給表中的數(shù)據(jù)添加數(shù)據(jù)校驗(yàn)規(guī)則,這些規(guī)則稱之為約束。
在創(chuàng)建表的時(shí)候,同時(shí)可以指定所插入數(shù)據(jù)的一些規(guī)則,比如某個(gè)字段不能為空值;
某個(gè)字段的值(比如年齡)不能小于零等等。這些規(guī)則稱為約束。
約束是在表上強(qiáng)制執(zhí)行的數(shù)據(jù)校驗(yàn)規(guī)則,它提供的自動(dòng)保持?jǐn)?shù)據(jù)庫(kù)完整性的一種方法!
創(chuàng)建約束的時(shí)機(jī):
---在建表的同時(shí)創(chuàng)建
---建表之后通過alter進(jìn)行創(chuàng)建
二、約束類型
從作用上分類,可以分成兩大類:
---表級(jí)約束:可以約束表中任意一列或者多列。可以定義除了not null意外的任意約束
---列級(jí)約束:只能約束其所在的某一列,可以定義任何約束。
1.主鍵約束( Key ) 唯一性,非空性
2.唯一約束 ( ) 唯一性,可以空,但只能有一個(gè)
3.檢查約束 (Check ) 對(duì)該列數(shù)據(jù)的范圍、格式的限制(如:年齡、性別等)
4.默認(rèn)約束 ( ) 該數(shù)據(jù)的默認(rèn)值
5.外鍵約束 ( Key ) 需要建立兩表間的關(guān)系并引用主表的列
數(shù)據(jù)庫(kù)提供了下面五種完整性約束:
1. 非空約束(not null) 插入數(shù)據(jù)的時(shí)候某些列不允許為空
2. 唯一約束( key) 唯一鍵約束,可以限定某一個(gè)列的值是唯一的,唯一鍵的列一般被用作索引列。
3. 主鍵約束( key) 非空且唯一數(shù)據(jù)庫(kù)引用完整性約束,任何一張表一般情況下最好有主鍵,用來唯一的標(biāo)識(shí)一行記錄,
4. 外鍵約束( key) 當(dāng)多個(gè)表之間有關(guān)聯(lián)關(guān)系(一個(gè)表的某個(gè)列的值依賴與另一張表的某個(gè)值)的時(shí)候,需要使用外鍵
5. 檢查約束(check) 可以根據(jù)用戶自己的需求去限定某些列的值
三、主鍵約束( Key )
主關(guān)鍵字約束指定表的一列或幾列的組合的值在表中具有惟一性,即能惟一地指定一行記錄。
每個(gè)表中只能有一列被指定為主關(guān)鍵字,且IMAGE 和TEXT 類型的列不能被指定為主關(guān)鍵字,也不允許指定主關(guān)鍵字列有NULL 屬性。
*** 多列組成的主鍵叫聯(lián)合主鍵,而且聯(lián)合主鍵約束只能設(shè)定為表級(jí)約束;單列組成的主鍵數(shù)據(jù)庫(kù)引用完整性約束,既可設(shè)定為列級(jí)約束,也可以設(shè)定為表級(jí)約束。
聯(lián)合主鍵:
聯(lián)合主鍵就是用2個(gè)或2個(gè)以上的字段組成主鍵。用這個(gè)主鍵包含的字段作為主鍵,這個(gè)組合在數(shù)據(jù)表中是唯一,且加了主鍵索引。
-- 1.主鍵約束(Primay Key Coustraint) 唯一性,非空性 ALTER TABLE student ADD CONSTRAINT PK_STU_ID PRIMARY KEY (stu_id); -- 插入兩次一模一樣的數(shù)據(jù) INSERT INTO student ( stu_id, name, age, hiredate, classes, email, deptno ) VALUES( 20200707, ‘zhansgan‘, 111, to_date( ‘2020-07-09‘, ‘YYYY-MM-DD‘ ), ‘1‘, ‘‘, 10 );
四、唯一約束
-- 2.唯一約束 (Unique Counstraint) 唯一性,可以空,但只能有一個(gè) ALTER TABLE student ADD CONSTRAINT PK_STU_EMAIL UNIQUE (email); -- 插入表中已存在的email數(shù)據(jù) INSERT INTO student ( stu_id, name, age, hiredate, classes, email, deptno ) VALUES( 202007171806, ‘lisi‘, 24, to_date( ‘2020-07-17‘, ‘YYYY-MM-DD‘ ), ‘2‘, ‘‘, 20 );