MySQL外鍵和參照完整性的聯(lián)系
MySQL外鍵可以保證數(shù)據(jù)庫的參照完整性,讓數(shù)據(jù)庫變得更簡(jiǎn)單。而參照完整性是數(shù)據(jù)庫設(shè)計(jì)中最重要的概念之一。
參照完整性(完整性約束)是數(shù)據(jù)庫設(shè)計(jì)中的一個(gè)重要概念,當(dāng)數(shù)據(jù)庫中的一個(gè)表與一個(gè)或多個(gè)表進(jìn)行關(guān)聯(lián)時(shí)都會(huì)涉及到參照完整性。比如下面這個(gè)例子:
文章分類表 - categories
category_id name
1 SQL Server
2 Oracle
3 PostgreSQL
5 SQLite
文章表 - articles
article_id category_id title
1 1 aa
2 2 bb
3 4 cc
可見以上兩個(gè)表之間是通過category_id,其中categories表有4條記錄,articles表有3條記錄。
然而可能因?yàn)槟撤N原因我們刪掉了categories 表中category_id=4的記錄,而articles表卻還是有一條category_id=4的記錄,很明顯,category_id=4的這條記錄不應(yīng)該存在在articles表中,這樣會(huì)很容易造成數(shù)據(jù)錯(cuò)亂。
相反,MySQL外鍵關(guān)系(Foreign Key relationships)討論的是父表(categories)與子表(articles)的關(guān)系,通過引入MySQL外鍵(Foreign Key)這個(gè)概念來保證參照完整性(Referential integrity),將使會(huì)數(shù)據(jù)庫變的非常簡(jiǎn)單。比如,要要做到刪除categories表中category_id=4記錄的同時(shí)刪除 articles 表中category_id=4的所有記錄,如果沒有引入MySQL外鍵的話,我們就必須執(zhí)行2條SQL語句才行;如果有外鍵的話,可以很容易的用一條SQL語句就可以達(dá)到要求。
【編輯推薦】