1. 程式人生 > 實用技巧 >MySQL資料庫之外來鍵約束的簡單理解

MySQL資料庫之外來鍵約束的簡單理解

定義

如果公共關鍵字在一個關係中是主關鍵字,那麼這個公共關鍵字被稱為另一個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另一個關係的外來鍵作主關鍵字的表被稱為主表,具有此外來鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。(來自百度百科)

要想理解外來鍵的概念,就不得不提到主鍵了。

主鍵:當有多個候選碼時,可以選定一個作為主碼,選定的候選碼稱主鍵;

外來鍵: 關係R中的一個屬性組,它不是R的候選碼,但它與另一個關係S的候選碼相對應,則稱這個屬性組為R的外碼或外來鍵。

舉個例子 有這樣的兩個關係: student(sno#,sname,d#),即學生這個關係有三個屬性:學號,姓名,所在系別; dep(d#,dname),即院系有兩個屬性:學院編號、學院名稱; 這裡sno#、d#是主鍵,也是各自所在關係的唯一候選鍵,d#是student的外來鍵。

外來鍵主要用於與另一張資料庫表的關聯關係。是能確定另一張表記錄的欄位,用於保持資料的一致性。比如,A表中的一個欄位,是B表的主鍵,那他就可以是A表的外來鍵。例如一張表中有小明的姓名、學號、性別、專業;另一張表包含學院編號和專業,這時候兩張表出現了重複的欄位,可以將他們理解為相同的欄位,畢竟小明除了自己的各項屬性之外,還要有在哪個學院的哪個專業。

示例

下面演示在創表的時候增加外來鍵約束

-- 建立年級表
CREATE TABLE grade(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 建立學生表
-- 學生表的gradeid欄位要去引用年級表的gradeid
-- 定義外來鍵key
-- 給這個外來鍵新增約束(執行引用)


CREATE TABLE IF NOT EXISTS `student` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '學號',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',
`sex` VARCHAR(6) NOT NULL DEFAULT 'male' COMMENT '性別',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
`gradeid` INT(10) NOT NULL COMMENT '學生的年級',
PRIMARY KEY (`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

刪除有外來鍵關係的表的時候,必須要先刪除引用別人的表(從表),再刪除被引用的表(主表)