使用主鍵建立表

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 列的副本。