十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1.外鍵的作用,主要有兩個(gè):
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括阿瓦提網(wǎng)站建設(shè)、阿瓦提網(wǎng)站制作、阿瓦提網(wǎng)頁制作以及阿瓦提網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,阿瓦提網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到阿瓦提省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一個(gè)是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性
一個(gè)就是能夠增加ER圖的可讀性
2.外鍵的配置
1)先創(chuàng)建一個(gè)主表,代碼如下:
#創(chuàng)建表student,并添加各種約束
create table student
(
id int primary key , #主鍵約束
name varchar(20) , #唯一約束
age int NOT NULL, #非空約束
sex varchar(2) ,
address varchar(20) default '重慶' #默認(rèn)約束
) ;
再通過一個(gè)外鍵,創(chuàng)建一個(gè)分?jǐn)?shù)表,這樣的話,就可以方便查詢。代碼如下:
#創(chuàng)建分?jǐn)?shù)表
create table score
(
id int primary key ,
sid int ,
china int ,
history int,
english int,
constraint FK_sid foreign key(sid) references student(id) #通過外鍵創(chuàng)建鏈接
) ;
創(chuàng)建外鍵的方法有很多,其中最常見創(chuàng)建外鍵的格式是:constraint FK_*** foreign key(**) references 鏈接的外表
刪除外鍵:
alter table drop foreign key '外鍵名'.
注意:
只有在定義外鍵時(shí),用constraint 外鍵名 foreign key .... 方便進(jìn)行外鍵的刪除
主鍵是唯一標(biāo)示這一行的,就好像你的身份證號一樣,每個(gè)人只有一個(gè),也是唯一能證明你是你的東西。外鍵是別人執(zhí)行你的東西。也就是說如果一個(gè)人想和你有點(diǎn)關(guān)系怎么辦,那就要關(guān)聯(lián)起來,怎么關(guān)聯(lián)起來,就通過外鍵啊
定義主鍵和外鍵主要是為了維護(hù)關(guān)系數(shù)據(jù)庫的完整性,總結(jié)一下:
一、主鍵是能確定一條記錄的唯一標(biāo)識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個(gè)人的,其他都可能有重復(fù),所以,身份證號是主鍵。
外鍵用于與另一張表的關(guān)聯(lián)。是能確定另一張表記錄的字段,用于保持?jǐn)?shù)據(jù)的一致性。比如,A表中的一個(gè)字段,是B表的主鍵,那他就可以是A表的外鍵。
主鍵是定義一個(gè)表中起主要作用的數(shù)據(jù)項(xiàng),這些數(shù)據(jù)項(xiàng)的數(shù)據(jù)在表中是唯一的,同時(shí)系統(tǒng)按主鍵為表建立索引。\x0d\x0a\x0d\x0a外鍵是定義一個(gè)表中的某數(shù)據(jù)項(xiàng)的數(shù)據(jù),要參照另一個(gè)表的主鍵數(shù)據(jù)。既沒有在另一個(gè)表的主鍵數(shù)據(jù)中出現(xiàn)的數(shù)據(jù),不允許在這個(gè)表的外鍵數(shù)據(jù)項(xiàng)中出現(xiàn)。\x0d\x0a\x0d\x0a主鍵:表中記錄的唯一標(biāo)識\x0d\x0a\x0d\x0a外鍵:依賴于別的表的數(shù)據(jù)\x0d\x0a\x0d\x0a唯一鍵:在表中唯一\x0d\x0a\x0d\x0a鍵是一個(gè)或多個(gè)字段的組合\x0d\x0a\x0d\x0a唯一鍵:可以確定一條記錄的字段(或字段組合),一張表可以有多個(gè)唯一鍵,正如可以識別你的身份的可以是身份證,學(xué)生證,軍人證\x0d\x0a\x0d\x0a主鍵:你把唯一鍵的一個(gè)選做主鍵,一張表只能有一個(gè)主鍵\x0d\x0a\x0d\x0a外鍵:所定義的外鍵是另一張表的主鍵,\x0d\x0a\x0d\x0a主鍵:表中記錄的唯一標(biāo)識,外鍵:依賴于別的表的數(shù)據(jù),唯一鍵:在表中唯一。\x0d\x0a\x0d\x0a主鍵和唯一鍵的一個(gè)區(qū)別:主鍵是不允許為NULL的,唯一鍵則可以,當(dāng)然你可以加上NOT NULL來限制它\x0d\x0a\x0d\x0a主鍵:能夠唯一表示數(shù)據(jù)表中的每個(gè)記錄的字段或者字段的組合就稱為主鍵。一個(gè)主鍵是唯一識別一個(gè)表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián),在這一點(diǎn)上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用于指定一個(gè)或多個(gè)列的組合值具有唯一性,以防止在列中輸入重復(fù)的值,所以,主鍵的值對用戶而言是沒有什么意義,并且和它賦予的值也沒有什么特別聯(lián)系。\x0d\x0a\x0d\x0a外鍵:\x0d\x0a\x0d\x0a若有兩個(gè)表A,B,C是A的主鍵,而B中也有C字段,則C就是表B的外鍵,外鍵約束主要用來維護(hù)兩個(gè)表之間數(shù)據(jù)的一致性。\x0d\x0a\x0d\x0aA為基本表,B為信息表。\x0d\x0a\x0d\x0a在數(shù)據(jù)庫中,常常不只是一個(gè)表,這些表之間也不是相互獨(dú)立的,不同的表之間需要建立一種關(guān)系,才能將它們的數(shù)據(jù)相互溝通,而在這個(gè)溝通過程中,就需要表中有一個(gè)字段作為標(biāo)志,不同的記錄對應(yīng)的字段取值不能相同,也不能是空白的,通過這個(gè)字段中不同的值可以區(qū)別各條記錄,就像我們區(qū)別不同的人,每個(gè)人都有名字,但它卻不能作為主鍵,因?yàn)槿嗣苋菀壮霈F(xiàn)重復(fù),而身份證號是每個(gè)人都不同的,所以可以根據(jù)它來區(qū)別不同的人,數(shù)據(jù)庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個(gè)記錄的值都不同,這才能根據(jù)主鍵的值來確定不同的記錄。\x0d\x0a\x0d\x0a什么是外鍵?\x0d\x0a\x0d\x0a說明你的表A中的某項(xiàng)a,是引用表B的某列b\x0d\x0a\x0d\x0a為什么要使用外鍵?\x0d\x0aRDBMS的基本概念,可以維護(hù)數(shù)據(jù)庫的完整。\x0d\x0a\x0d\x0a如何來用,涉及到數(shù)據(jù)庫的定義。\x0d\x0a\x0d\x0a唯一約束和主鍵的區(qū)別是什么?\x0d\x0a\x0d\x0a唯一性約束\x0d\x0a\x0d\x0a唯一性約束所在的列允許空值,但是主鍵約束的列不允空值。\x0d\x0a\x0d\x0a可以把唯一約束放在一個(gè)或者多個(gè)列上,但是,唯一性約束所在的列并不是表的主鍵列。\x0d\x0a\x0d\x0a唯一性約束強(qiáng)制在指定的列上創(chuàng)建一個(gè)唯一性索引,在默認(rèn)情況下,創(chuàng)建唯一性的非聚簇索引,但是,也可以指定所創(chuàng)建的索引是聚簇索引。\x0d\x0a\x0d\x0a主鍵:\x0d\x0a\x0d\x0a用于標(biāo)識某行而且與之相關(guān)\x0d\x0a\x0d\x0a是不可能更新\x0d\x0a\x0d\x0a不應(yīng)該允許空\x0d\x0a\x0d\x0a唯一域/字段\x0d\x0a\x0d\x0a用于作為訪問某行的可選手段。\x0d\x0a\x0d\x0a只要唯一就可以更新\x0d\x0a\x0d\x0a可以為空\x0d\x0a\x0d\x0a注意唯一和主鍵的區(qū)別,它們都是創(chuàng)建一個(gè)唯一的索引,一個(gè)表格僅含有一個(gè)主鍵約束列,但是,它有可能在其他列中含有許多的唯一約束。
mysql設(shè)置主鍵的代碼是PRIMARY KEY (主鍵字段)。
如:CREATE TABLE Customer (SID integer,Last_Name varchar(30),F(xiàn)irst_Name varchar(30),PRIMARY KEY (SID))。
主關(guān)鍵字(主鍵,primary key)是被挑選出來,作表的行的唯一標(biāo)識的候選關(guān)鍵字。一個(gè)表只有一個(gè)主關(guān)鍵字。主關(guān)鍵字又可以稱為主鍵。
擴(kuò)展資料:
永遠(yuǎn)也不要更新主鍵。實(shí)際上,因?yàn)橹麈I除了唯一地標(biāo)識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應(yīng)對用戶無意義的原則被違反了。
主鍵應(yīng)當(dāng)由計(jì)算機(jī)自動生成。如果由人來對主鍵的創(chuàng)建進(jìn)行干預(yù),就會使它帶有除了唯一標(biāo)識一行以外的意義。一旦越過這個(gè)界限,就可能產(chǎn)生人為修改主鍵的動機(jī),這樣,這種系統(tǒng)用來鏈接記錄行、管理記錄行的關(guān)鍵手段就會落入不了解數(shù)據(jù)庫設(shè)計(jì)的人的手中。
主鍵是一個(gè)索引,mysql的索引是B+樹,Mysql會按照鍵值的大小進(jìn)行順序存放,如果我們設(shè)置自增id為主鍵,這個(gè)時(shí)候主鍵是按照一種緊湊的接近順序?qū)懭氲姆绞竭M(jìn)行存儲數(shù)據(jù)。如果我們用其他字段作為主鍵的話,此時(shí)Mysql不得不為了將新記錄插到合適位置而移動數(shù)據(jù),甚至目標(biāo)頁面可能已經(jīng)被回寫到磁盤上而從緩存中清掉,此時(shí)又要從磁盤上讀回來,這增加了很多額外的開銷,同時(shí)頻繁的移動、分頁操作造成了大量的碎片。
- 考慮性能消耗
- 考慮資源消耗
- 考慮分庫分表