在MySQL數(shù)據(jù)庫中,主鍵和外鍵是兩個非常重要的概念。雖然它們都是數(shù)據(jù)庫表中的“鍵”,但在功能和應(yīng)用方面卻是完全不同的。
首先來看主鍵。主鍵是用來唯一標(biāo)識一條記錄的字段或字段集合。每個表都必須要有一個主鍵,而且主鍵值不能重復(fù)。主鍵通常是一個自增的整數(shù)字段,也可以是其他某個字段,比如郵箱、用戶名等。主鍵的作用是用來確保數(shù)據(jù)表中每個記錄都有一個唯一的標(biāo)識符,方便進(jìn)行數(shù)據(jù)的查找和修改。
CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20) NOT NULL, `email` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
上面這個SQL語句創(chuàng)建了一個名為user的表,其中包含id、name和email三個字段。id字段是主鍵字段,它的類型是INT,且是自增的,也就是說每當(dāng)往表中添加一條新的記錄時,id都會自動遞增。PRIMARY KEY關(guān)鍵字表示id字段是該表的主鍵。
接下來看外鍵。外鍵是用來建立表與表之間關(guān)系的一種機制。用外鍵可以實現(xiàn)多個表之間的關(guān)聯(lián),保持?jǐn)?shù)據(jù)表之間的完整性。例如,在一個電話本應(yīng)用中,聯(lián)系人表和電話號碼表就可以使用外鍵來進(jìn)行關(guān)聯(lián)。一個聯(lián)系人可以有很多電話號碼,而一個電話號碼只屬于一個聯(lián)系人。這時可以在聯(lián)系人表中創(chuàng)建一個外鍵,關(guān)聯(lián)到電話號碼表的主鍵上,從而實現(xiàn)關(guān)聯(lián)。
CREATE TABLE `contact` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB; CREATE TABLE `phone_number` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `number` VARCHAR(20) NOT NULL, `contact_id` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX `contact_id_fk_idx` (`contact_id` ASC) VISIBLE, CONSTRAINT `contact_id_fk` FOREIGN KEY (`contact_id`) REFERENCES `contact` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=INNODB;
上面這個SQL語句創(chuàng)建了兩個表,contact表和phone_number表。contact表有一個主鍵id,phone_number表有一個主鍵id和一個外鍵contact_id,關(guān)聯(lián)到contact表的主鍵。通過這種方式,可以在phone_number表中建立關(guān)聯(lián)關(guān)系,使得一個電話號碼只屬于一個聯(lián)系人。
綜上所述,主鍵和外鍵在MySQL中有著不同的功能和應(yīng)用。主鍵用來唯一標(biāo)識一條記錄,方便進(jìn)行數(shù)據(jù)的查找和修改;外鍵用來建立表與表之間關(guān)系,保持?jǐn)?shù)據(jù)表之間的完整性。