使用主鍵建立表
CREATE TABLE Person (
PersonID INT UNSIGNED NOT NULL,
LastName VARCHAR(66) NOT NULL,
FirstName VARCHAR(66),
Address VARCHAR(255),
City VARCHAR(66),
PRIMARY KEY (PersonID)
);
一個主鍵是一個單 NOT NULL
或它唯一地標識一個表的一行多列的識別符號。建立了一個索引 ,如果沒有顯式宣告為 NOT NULL
,MySQL 會默默地和隱式地宣告它們。
一張桌子只能有一個 PRIMARY KEY
,建議每張桌子都有一個。InnoDB 會在沒有的情況下自動建立一個(如 MySQL 文件中所示 ),儘管這不太理想。
通常,AUTO_INCREMENT
INT
也稱為代理鍵,用於精簡索引優化和與其他表的關係。每當新增新記錄時,此值將(通常)增加 1,從預設值 1 開始。
然而,儘管它的名字,它的目的不是保證價值是增量的,而只是它們是連續的和獨特的。
如果刪除表中的所有行,則自動遞增 INT
值將不會重置為其預設起始值,除非使用 TRUNCATE TABLE
語句截斷該表。
將一列定義為主鍵(內聯定義)
如果主鍵由單個列組成,則 PRIMARY KEY
子句可以與列定義內聯:
CREATE TABLE Person (
PersonID INT UNSIGNED NOT NULL PRIMARY KEY,
LastName VARCHAR(66) NOT NULL,
FirstName VARCHAR(66),
Address VARCHAR(255),
City VARCHAR(66)
);
這種形式的命令更短,更容易閱讀。
定義多列主鍵
還可以定義包括多於一列的主鍵。這可以在例如外來鍵關係的子表上完成。通過在單獨的 PRIMARY KEY
子句中列出參與列來定義多列主鍵。此處不允許使用內聯語法,因為只有一列可以宣告為 PRIMARY KEY
inline。例如:
CREATE TABLE invoice_line_items (
LineNum SMALLINT UNSIGNED NOT NULL,
InvoiceNum INT UNSIGNED NOT NULL,
-- Other columns go here
PRIMARY KEY (InvoiceNum, LineNum),
FOREIGN KEY (InvoiceNum) REFERENCES -- references to an attribute of a table
);
請注意,主鍵的列應按邏輯排序順序指定,這可能與列定義的順序不同,如上例所示。
較大的索引需要更多的磁碟空間,記憶體和 I / O. 因此,鍵應儘可能小(特別是關於組合鍵)。在 InnoDB 中,每個二級索引都包含 PRIMARY KEY
列的副本。