鍵的約束
在第一章的資料庫裡我們就提到過主鍵,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可以從資...