資料應用達人之SQL基礎教程分享4 鍵的約束

2021-08-02 14:41:27 字數 3114 閱讀 1793

鍵的約束

在第一章的資料庫裡我們就提到過主鍵,sql也不例外。

sql裡的主鍵是表裡的乙個或多個用於實現唯一性標記的列(字段),主鍵是在建立表的時候指定的。

以我們建立的student表為例,我們將id設定為主鍵:

sql** 

create

table student  

(  id int

notnull

primary

key,  

sname varchar(25) not

null,  

*** varchar(10),  

major varchar(20),  

credit int

);  

-- 或者

create

table student  

(  id int

notnull,  

sname varchar(25) not

null,  

*** varchar(10),  

major varchar(20),  

credit int,  

primary

key (id)  

);  

之所以那id做為主鍵,說明id可以作為唯一標識,因為每個人的id都是不同的值。這樣可以確保student表裡資料的準確性和一致性,通過id就可以完整的表達(展示)出每一行的資料。

unique,即唯一性約束,要求表裡的某一列的值在每一行都是唯一的,這一點和主鍵約束是類似的。

unique的用法和主鍵類似,以student學生表為例:

sql** 

create

table student  

(  id int

notnull

unique,  

sname varchar(25) not

null,  

*** varchar(10),  

major varchar(20),  

credit int

);  

-- 或者

create

table student  

(  id int

notnull,  

sname varchar(25) not

null,  

*** varchar(10),  

major varchar(20),  

credit int,  

unique (id)  

);  

例子只是為了說明unique的用法,沒有實際意義,供參考而已。

當然,主鍵約束和唯一性約束直接也有很多不同點:

·唯一性約束的列允許值為null,但主鍵不允許;

·唯一性約束可以設定多個列,但它們不會被當做主鍵使用;

·一般情況下,乙個表裡可以有多個唯一性約束,但只有乙個主鍵(當然也可以有多個列或字段來組成乙個組合主鍵);

·主鍵還有乙個關鍵的作用,就是被外來鍵引用。

所以,我們就來了解下外來鍵吧。

什麼是外來鍵?外來鍵實際上是基於主鍵才存在的,在表1中存在的主鍵,在表2中也存在,則它便成了表2的乙個外來鍵。

換一種描述,即乙個表中的 外來鍵foreign key 是指向另乙個表中的主鍵 primary key的,實際上有點子類繼承父類的意思。

我們舉例說明,假設我們還有乙個表financestu(金融專業學生表),它有id、sname、class(班級)等列,該錶的id是自身的主鍵,且又是對student的外來鍵:

sql** 

create

table financestu  

(  id int

notnull,  

sname varchar(25) not

null,  

*** varchar(10),  

class varchar(10),  

credit int,  

primary

key (id),  

foreign

key (id) references student(id)  

);  

所以我們可以把student看成父表,而financestu則是基於student的子表。如果我們把父表裡的id刪除,則子表裡的id也會被刪除,這就是之前更新表、刪除表裡提到的關聯和約束了,這也是為什麼我們一強調說,在設計表時要考慮周全的乙個重要原因。

check約束是用來規定列的取值範圍的,它可以規定乙個列的取值範圍,也可以規定多個列的取值範圍:

sql** 

check (列 規定)  

-- 對乙個列進行check約束

constraint 約定名 check (列1 規定,列2 規定,列3 規定)  

-- 對乙個或多個列進行check約束

例如我們要把student表中的id做個check約束,要求它的取值不能低於20160000,credit不能低於0(但允許是空的),我們可以這樣寫:

sql** 

create

table student  

(  id int

notnull,  

sname varchar(25) not

null,  

*** varchar(10),  

major varchar(20),  

credit int,  

constraint mycheck check (id > 20160000,credit > 0)  

);  

有了這樣的約束之後,我們在新增修改行資料的時候,就需要遵循這個約束了。

我們在這幾節介紹了一些操作表的sql語句,使用create table用來建立新錶, alter table用來更改表列物件, 而 drop table可以用來完整地刪除乙個表。 

但我們要注意,這些語句我們必須小心使用,並且在使用時應該做好備份工作。

由於這些語句在不同資料庫管理系統(dbms)中語法都會有所區別,更多詳細的資訊大家不妨可以去查詢相對應的一些dbms文件。

另外關於鍵(列)的約束,約束看起來是比較簡單的,但它對資料庫表的完整性、關聯性起著至關重要的作用。

下文待續。。。。。。

資料應用達人之SQL基礎教程分享2

了解sql 了解完資料庫,我們就來認識下sql吧。sql是structured query language的簡稱,即結構化查詢語言,這是一門專門用來跟資料庫 交流 訪問 處理資料庫 的標準語言。我們可以使用sql和許多資料庫程式一起協同工作,比如mysql oracle ms access sql...

資料應用達人之SQL基礎教程分享6 比較與邏輯操作

sql裡有很多操作符,它們都是用來滿足sql查詢的,特別是為where語句指定條件所使用,所以本章我們會結合where語句的使用對sql的操作符一一進行講解 比比才知道 比較符是基於兩個值的比較,sql裡也一樣,有等於 不等於 大於 小於等比較符。我們先來了解下等於與不等 等於與不等是sql裡常見的...

SQL基礎教程

sql是用於訪問和處理資料庫的標準的計算機語言。什麼是sql?sql指結構化查詢語言 sql是我們有能力訪問資料庫 sql是一種更ansi的標準計算機語言 sql能做什麼?sql面向資料庫執行查詢 sql可從資料庫取回資料 sql可在資料庫中插入新的記錄 sql可以更新資料庫中的資料 sql可以從資...