主鍵:是唯一標(biāo)識(shí)一條記錄,不能有重復(fù)不允許為空,用來(lái)保證數(shù)據(jù)完整性。
外鍵:是另一表的主鍵, 外鍵可以有重復(fù)的, 可以是空值,用來(lái)和其他表建立聯(lián)系用的。所以說,如果談到了外鍵,一定是至少涉及到兩張表。
如果表A的主關(guān)鍵字是表B中的字段,則該字段稱為表B的外鍵,表A稱為主表,表B稱為從表。外鍵是用來(lái)實(shí)現(xiàn)參照完整性的,不同的外鍵約束方式將可以使兩張表緊密的結(jié)合起來(lái),特別是修改或者刪除的級(jí)聯(lián)操作將使得日常的維護(hù)工作更加輕松。外鍵主要用來(lái)保證數(shù)據(jù)的完整性和一致性,所以說,外鍵一定是在從表中創(chuàng)建,從而找到與主表之間的聯(lián)系;從表負(fù)責(zé)維護(hù)二者之間的關(guān)系。

一、外鍵的使用
外鍵的使用需要滿足以下條件:
1、兩張表必須都是InnoDB存儲(chǔ)引擎(MyISAM不支持外鍵),并且它們沒有臨時(shí)表。
2、建立外鍵關(guān)系的對(duì)應(yīng)列必須具有相似的數(shù)據(jù)類型,也就是可以相互轉(zhuǎn)換類型的列,比如int和tinyint可以,而int和char則不可以。
3、建立外鍵關(guān)系的對(duì)應(yīng)列必須建立了索引。
4、假如顯式的給出了CONSTRAINT symbol,那symbol在數(shù)據(jù)庫(kù)中必須是唯一的。假如沒有顯式的給出,InnoDB會(huì)自動(dòng)的創(chuàng)建。
二、添加外鍵的語(yǔ)法
添加外鍵有兩種方式:一種是創(chuàng)建表的時(shí)候添加,另一種是對(duì)已創(chuàng)建的表,修改表結(jié)構(gòu)來(lái)添加。
創(chuàng)建表時(shí)添加外鍵的語(yǔ)法:
[CONSTRAINT symbol] FOREIGN KEY [id] (從表的字段1)
REFERENCES 主表的表名 (主表的字段2)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
CONSTRAINT symbol:可以給這個(gè)外鍵約束起一個(gè)名字,有了名字,以后找到它就很方便了。如果不加此參數(shù)的話,系統(tǒng)會(huì)自動(dòng)分配一個(gè)名字。
FOREIGN KEY:將從表中的字段1作為外鍵的字段。
REFERENCES:映射到主表的字段2。
ON DELETE后面的四個(gè)參數(shù):代表的是當(dāng)刪除主表的記錄時(shí),所做的約定。
RESTRICT(限制):若主表有對(duì)應(yīng)從表的記錄,此主表將無(wú)法刪除。
CASCADE(級(jí)聯(lián)):若主表的記錄刪掉,則從表中相關(guān)聯(lián)的記錄都將被刪掉。
SET NULL:從主表中刪除或更新對(duì)應(yīng)的行,同時(shí)將從表中的外鍵列設(shè)為空。
NO ACTION:InnoDB拒絕刪除或者更新主表。

修改表結(jié)構(gòu)添加外鍵的語(yǔ)法:
ALTER TABLE 從表的表名 ADD FOREIGN KEY(從表的字段1) REFERENCES 主表的表名(主表的字段2);
ALTER TABLE從表的表名:在從表中進(jìn)行操作。
ADD FOREIGN KEY(從表的字段1):將從表的字段添加為外鍵。
REFERENCES 主表的表名(主表的字段2):映射到主表當(dāng)中為的字段。
外鍵約束使用最多的兩種情況:
主表更新時(shí)從表也更新,主表刪除時(shí)如果從表有匹配的項(xiàng),刪除失??;
ON UPDATE CASCADE ON DELETE RESTRICT;
主表更新時(shí)從表也更新,主表刪除時(shí)從表匹配的項(xiàng)也刪除。
ON UPDATE CASCADE ON DELETE CASCADE;
三、刪除外鍵
獲取外鍵名的語(yǔ)法:
SHOW CREATE TABLE 從表的表名;
刪除外鍵語(yǔ)法:
ALTER TABLE 從表的表名 DROP FOREIGN KEY 外鍵名;








暫無(wú)數(shù)據(jù)