主鍵約束

來源:互聯網
上載者:User

標籤:add   建立   const   alt   就是   複合   定義類   附加   ora   

第一範式要求每張表都要有主鍵,因此主鍵約束是非常重要的,而且主鍵約束是外部索引鍵關聯的基礎條件。主鍵約束為表之間的關聯提供了連結點。

主鍵必須能夠唯一標識一條記錄,也就是主鍵欄位中的值必須是唯一的,而且不能包含NULL 值。從這種意義上來說,主鍵約束是UNIQUE 約束和非空約束的組合。雖然一張表中可以有多個UNIQUE 約束和非空約束,但是每個表中卻只能有一個主鍵約束。在CREATE TABLE語句中定義主鍵約束非常簡單,和UNIQUE 約束和非空約束非常類似,只要在欄位定義後添加PRIMARY KEY關鍵字即可。不過在DB2中,主鍵列也必須顯式的定義為NOT NULL。下面的代碼建立了員工資訊表,並且將欄位FNumber 設定為主鍵欄位:

MYSQL、MSSQLServer:CREATE TABLE T_Person (FNumber VARCHAR(20) PRIMARY KEY,FName VARCHAR(20),FAge INT)Oracle:CREATE TABLE T_Person (FNumber VARCHAR2(20) PRIMARY KEY,FName VARCHAR2(20),FAge NUMBER (10))DB2:CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL PRIMARY KEY,FName VARCHAR(20),FAge INT)

建立完T_Person表後,請執行下面的SQL語句預置一些初始資料到T_Person表中:

INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "1" , "kingchou", 20);INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "2" , "stef", 22);INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "3" , "long", 26);INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "4" , "yangzk", 27);INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "5" , "beansoft", 26);

執行完畢後就能在表T_Person中的看到下面的資料:

FNUMBER FNAME FAGE1 kingchou 202 stef 223 long 264 yangzk 275 beansoft 26

接著執行下面的SQL語句進行測試:

INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "3" , "sunny", 22);

由於表T_Person 中已經存在FNumber 等於3 的值了,所以執行上邊的SQL 陳述式後數

據庫系統會報出如下的錯誤資訊:

  • 違反了 PRIMARY KEY 約束"PKT_Person2E1BDC42"。不能在對象 "dbo.T_Person" 中插入重複鍵。

現在可以刪除T_Person表了:

DROP TABLE T_Person;

除了這種由單一欄位組成的主鍵之外,還可以由多個欄位來組成主鍵,這樣的主鍵被稱為複合主鍵或者聯合主鍵。複合主鍵的定義和複合唯一約束的定義類似,下面的SQL 陳述式用來建立員工資訊表,並且將欄位FNumber 和FName設定為複合主鍵:

MYSQL、MSSQLServer:CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName))Oracle:CREATE TABLE T_Person (FNumber VARCHAR2(20)FName VARCHAR2(20),FAge NUMBER (10) ,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName))DB2:CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName))

儘管在建立表的時候就定義主鍵是一個好的習慣,但是如果表建立了時候沒有定義主鍵,那麼也可以在以後添加主鍵,其添加方式與添加UNIQUE 約束類似,也就是使用ALTER TABLe語句。不過通過這種方式添加主鍵的時候有一個附加條件,那就是組成主鍵的欄位必須包含NOT NULL約束。如果在沒有添加非空約束的欄位上建立主鍵,系統將會爆出錯誤資訊。

首先建立一個沒有主鍵的T_Person 表,注意其中的欄位FNumber 和FName 添加了非空約束:

MYSQL、MSSQLServer:CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT)Oracle:CREATE TABLE T_Person (FNumber VARCHAR2(20) NOT NULL,FName VARCHAR2(20) NOT NULL,FAge NUMBER (10))DB2:CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT)

可以執行下面的SQL語句為T_Person建立主鍵約束:

ALTER TABLE T_Person ADD CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName)

最後刪除主鍵約束的方式與刪除UNIQUE 約束以及CHECK 條件約束的方式相同,只要使

用帶有DROP子句的ALTER TABLE 語句即可:

ALTER TABLE T_PersonDROP CONSTRAINT pk_1;

這個語句在MYSQL中無效,在MYSQL中要執行下面的SQL語句才能刪除主鍵:

ALTER TABLE T_PersonDROP PRIMARY KEY;

主鍵約束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.