1. 程式人生 > >主鍵約束

主鍵約束

有一個 ava values 其中 value arc 必須 添加 第一範式

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

主鍵必須能夠唯一標識一條記錄,也就是主鍵字段中的值必須是唯一的,而且不能包含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 FAGE

1 kingchou 20

2 stef 22

3 long 26

4 yangzk 27

5 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_Person

DROP CONSTRAINT pk_1;

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


ALTER TABLE T_Person

DROP PRIMARY KEY;

主鍵約束