1.外鍵的作用,主要有兩個:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),長治企業(yè)網(wǎng)站建設(shè),長治品牌網(wǎng)站建設(shè),網(wǎng)站定制,長治網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,長治網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
一個是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性
一個就是能夠增加ER圖的可讀性
2.外鍵的配置
1)先創(chuàng)建一個主表,代碼如下:
#創(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)約束
) ;
再通過一個外鍵,創(chuàng)建一個分?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 '外鍵名'.
注意:
只有在定義外鍵時,用constraint 外鍵名 foreign key .... 方便進行外鍵的刪除
主鍵是唯一標(biāo)示這一行的,就好像你的身份證號一樣,每個人只有一個,也是唯一能證明你是你的東西。外鍵是別人執(zhí)行你的東西。也就是說如果一個人想和你有點關(guān)系怎么辦,那就要關(guān)聯(lián)起來,怎么關(guān)聯(lián)起來,就通過外鍵啊
定義主鍵和外鍵主要是為了維護關(guān)系數(shù)據(jù)庫的完整性,總結(jié)一下:
一、主鍵是能確定一條記錄的唯一標(biāo)識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重復(fù),所以,身份證號是主鍵。
外鍵用于與另一張表的關(guān)聯(lián)。是能確定另一張表記錄的字段,用于保持?jǐn)?shù)據(jù)的一致性。比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵。
點結(jié)構(gòu) ,里面就有修改某個字段的.就有一項是設(shè)置主鍵的,勾選就可以了
另外建議下載 navicat 這個軟件.有中文版的.
操作非常方便.就像是用access一樣簡單.
1、主鍵定義
表中經(jīng)常有一個列或多列的組合,其值能唯一地標(biāo)識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。當(dāng)創(chuàng)建或更改表時可通過定義 PRIMARY KEY 約束來創(chuàng)建主鍵。一個表只能有一個 PRIMARY KEY 約束,而且 PRIMARY KEY 約束中的列不能接受空值。由于 PRIMARY KEY 約束確保唯一數(shù)據(jù),所以經(jīng)常用來定義標(biāo)識列。
2、主鍵作用
1)保證實體的完整性;
2)加快數(shù)據(jù)庫的操作速度
3) 在表中添加新記錄時,數(shù)據(jù)庫會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復(fù)。
4) 數(shù)據(jù)庫自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
3、主鍵的必要性
在有些數(shù)據(jù)庫中,雖然主鍵不是必需的,但最好為每個表都設(shè)置一個主鍵,不管是單主鍵還是復(fù)合主鍵。它存在代表著表結(jié)構(gòu)的完整性,表的記錄必須得有唯一區(qū)分的字段,主鍵主要是用于其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。
4、主鍵的選擇
1)編號作主鍵
此方法就是采用實際業(yè)務(wù)中的唯一字段的“編號”作為主鍵設(shè)計,這在小型的項目中是推薦這樣做的,因為這可以使項目比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行“編號修改”時,可能要涉及到很多相關(guān)聯(lián)的其他表
2)自動編號主鍵
這種方法也是很多人在使用的,就是新建一個ID字段,自動增長,非常方便也滿足主鍵的原則
a、優(yōu)點:數(shù)據(jù)庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對于檢索非常有利;數(shù)字型的,占用空間小,易排序,在程序中傳遞也方便;如果通過非系統(tǒng)增加記錄(比如手動錄入,或是用其他工具直接在表里插入新記錄,或老系統(tǒng)數(shù)據(jù)導(dǎo)入)時,非常方便,不用擔(dān)心主鍵重復(fù)問題。
b、缺點:其實缺點也就是來自其優(yōu)點,就是因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當(dāng)系統(tǒng)與其他系統(tǒng)集成時,需要數(shù)據(jù)導(dǎo)入時,很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數(shù)字型的);如果其他系統(tǒng)主鍵不是數(shù)字型那就麻煩更大了,會導(dǎo)致修改主鍵數(shù)據(jù)類型了,這也會導(dǎo)致其他相關(guān)表的修改,后果同樣很嚴(yán)重;就算其他系統(tǒng)也是數(shù)字型的,在導(dǎo)入時,為了區(qū)分新老數(shù)據(jù),可能想在老數(shù)據(jù)主鍵前統(tǒng)一加一個“o”(old)來表示這是老數(shù)據(jù),那么自動增長的數(shù)字型又面臨一個挑戰(zhàn)。
3)Max加一
由于自動編號存在那些問題,所以有些人就采用自己生成,同樣是數(shù)字型的,只是把自動增長去掉了,采用在Insert時,讀取Max值后加一,這種方法可以避免自動編號的問題,但也存在一個效率問題,如果記錄非常大的話,那么Max()也會影響效率的;更嚴(yán)重的是并發(fā)性問題,如果同時有兩人讀到相同的Max后,加一后插入的ID值會重復(fù),這已經(jīng)是有經(jīng)驗教訓(xùn)的了。
4)自制加一
考慮Max加一的效率后,有人采用自制加一,也就是建一個特別的表,字段為:表名,當(dāng)前序列值。這樣在往表中插入值時,先從此表中找到相應(yīng)表的最大值后加一,進行插入,有人可能發(fā)現(xiàn),也可能會存在并發(fā)處理,這個并發(fā)處理,可以采用lock線程的方式來避免,在生成此值的時,先Lock,取到值以后,再unLock出來,這樣不會有兩人同時生成了。這比Max加一的速度要快多了。但同樣存在一個問題:在與其他系統(tǒng)集成時,脫離了系統(tǒng)中的生成方法后,很麻煩保證自制表中的最大值與導(dǎo)入后的保持一致,而且數(shù)字型都存在上面講到的“o”老數(shù)據(jù)的導(dǎo)入問題。因此在“自制加一”中可以把主鍵設(shè)為字符型的。字符型的自制加一中應(yīng)該字符型主鍵可以應(yīng)付很多我們意想不到的情況。
5)GUID主鍵
目前一個比較好的主鍵是采用GUID,推薦主鍵還是字符型的,但值由GUID生成,GUID是可以自動生成,也可以程序生成,而且鍵值不可能重復(fù),可以解決系統(tǒng)集成問題,幾個系統(tǒng)的GUID值導(dǎo)到一起時,也不會發(fā)生重復(fù),就算有“o”老數(shù)據(jù)也可以區(qū)分,而且效率很高,在.NET里可以直接使用System.Guid.NewGuid()進行生成,在SQL里也可以使用NewID()生成。優(yōu)點是:
同IDENTITY 列相比,uniqueidentifier 列可以通過NewID() 函數(shù)提前得知新增加的行ID,為應(yīng)用程序的后續(xù)處理提供了很大方便。
a、優(yōu)點:便于數(shù)據(jù)庫移植,其它數(shù)據(jù)庫中并不一定具有IDENTITY 列,而Guid 列可以作為字符型列轉(zhuǎn)換到其它數(shù)據(jù)庫中,同時將應(yīng)用程序中產(chǎn)生的GUID 值存入數(shù)據(jù)庫,它不會對原有數(shù)據(jù)帶來影響。便于數(shù)據(jù)庫初始化,如果應(yīng)用程序要加載一些初始數(shù)據(jù),IDENTITY 列的處理方式就比較麻煩,而uniqueidentifier 列則無需任何處理,直接用T-SQL 加載即可。便于對某些對象或常量進行永久標(biāo)識,如類的ClassID,對象的實例標(biāo)識,UDDI 中的聯(lián)系人、服務(wù)接口、tModel標(biāo)識定義等。
b:缺點是:
GUID 值較長,不容易記憶和輸入,而且這個值是隨機、無順序的
GUID 的值有16 個字節(jié),與其它那些諸如4 字節(jié)的整數(shù)相比要相對大一些。這意味著如果在數(shù)據(jù)庫中使用uniqueidentifier 鍵,可能會帶來兩方面的消極影響:存儲空間增大;索引時間較慢。
1、打開navicat工具,連接上mysql服務(wù)器,選擇完數(shù)據(jù)庫之后,選擇一個表右擊選擇設(shè)計表(這里為了演示測試,隨便選擇一個表即可)。
2、在設(shè)計表頁面,可以看到當(dāng)前表的所有字段信息,我們選擇的學(xué)生表有一個id字段,目前該表沒有主鍵字段。
3、如圖,在最后一列右擊選擇主鍵,即可將該字段設(shè)置為主鍵,也可以直接點擊鼠標(biāo)左鍵,可以快速添加和取消主鍵。
4、設(shè)置完主鍵之后,可以看到一把鎖的標(biāo)志,并且有一個1字,因為一個表可以給多個字段添加主鍵,則為聯(lián)合主鍵,這樣就顯示為主鍵1,主鍵2等。
5、主鍵設(shè)置完成之后,還沒有自增,選擇id字段之后,在下方,如圖,勾選自動遞增,這樣id在每次插入記錄之后都會自增一個值。
6、設(shè)置完成主鍵和自增之后,點擊保存,關(guān)閉當(dāng)前窗口,然后選擇表名右擊選擇對象信息。
7、在DLL頁面中,可以看到剛剛添加的主鍵和自增的DLL語句,這里就是創(chuàng)建表的DLL語句。
8、上面有提到聯(lián)合主鍵,其實一個表可以給多個字段設(shè)置主鍵,這樣可以組成聯(lián)合主鍵,對于特定的業(yè)務(wù),聯(lián)合主鍵也是必須的。
你是程序版的還是網(wǎng)頁版的?
用SQL語句就行 等下給你
ALTER TABLE `表` DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `字段` )
保證字段是INT