十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
數(shù)據(jù)庫mysql
創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元成都做網(wǎng)站,已為上家服務(wù),為成都各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。
外鍵作用:使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!
指定主鍵關(guān)鍵字:foreignkey(列名)
引用外鍵關(guān)鍵字:references外鍵表名(外鍵列名)
事件觸發(fā)限制:ondelete和onupdate,可設(shè)參數(shù)cascade(跟隨外鍵改動),restrict(限制外表中的外鍵改動),setNull(設(shè)空值),setDefault(設(shè)默認(rèn)值),[默認(rèn)]noaction
例如:
outTable表主鍵id類型int
創(chuàng)建含有外鍵的表:
createtabletemp(
idint,
namechar(20),
foreignkey(id)referencesoutTable(id)ondeletecascadeonupdatecascade);
說明:把id列設(shè)為外鍵參照外表outTable的id列當(dāng)外鍵的值刪除本表中對應(yīng)的列篩除當(dāng)外鍵的值改變本表中對應(yīng)的列值改變。
自己實踐才能完全了解外鍵的作用關(guān)鍵是:事件觸發(fā)限制的作用
1.外鍵的作用,主要有兩個:
一個是讓數(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表的外鍵。
通過工具NAVICAT 設(shè)計表時進行設(shè)計
打開NAVICAT,連接數(shù)據(jù)庫
右鍵目標(biāo)表,選擇設(shè)計表
打開后選擇外鍵菜單,具體如圖:
分別設(shè)置外鍵名,字段,關(guān)聯(lián)數(shù)據(jù)庫、表、字段,以及刪除時操作,更新時操作方式然后點擊保存按鈕即可
也可以通過SQL方式完成對表外鍵的添加,如:
語法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對應(yīng)的表的主鍵字段名);
為已經(jīng)添加好的數(shù)據(jù)表添加外鍵:
語法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對應(yīng)的表的主鍵字段名);
例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
//FK_ID是外鍵的名稱
/*
CREATE TABLE `tb_active` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `user_id_2` (`user_id`),
CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
*/
刪除外鍵
語法: ALTER TABLE table-name DROP FOREIGN KEY key-id;
例: ALTER TABLE `tb_active` DROP FOREIGN KEY 'FK_ID'
自動鍵更新和刪除:
外鍵可以保證新插入的記錄的完整性,但是,如果在REFERENCES從句中已命名的表刪除記錄會怎么樣?在使用同樣的值作為外鍵的輔助表中會發(fā)生什么?
很明顯,那些記錄也應(yīng)該被刪除,否則在數(shù)據(jù)庫中就會有很多無意義的孤立記錄,MYSQL可以通過向FOREIGN KEY...REFERENCES修飾符添加一個ON DELETE 或ON UPDATE子句簡化任務(wù),它告訴了數(shù)據(jù)庫在這種情況如何處理孤立任務(wù)。
數(shù)據(jù)庫中怎么設(shè)置"組合主碼外碼
主碼 我們在建立數(shù)據(jù)庫的時候,需要為每張表指定一個主碼,主碼也叫主鍵。
所謂主碼就是在實體集中區(qū)分不同實體的候選碼。
一個實體集中只能有一個主碼,但可以有多個候選碼。
外碼,如果一個關(guān)系中的一個屬性是另外一個關(guān)系中的主碼則這個屬性為外碼。