從上面的這個圖可以看到在設計的時候,就給表1添加一個外鍵,這個外鍵就是表2中的學號字段,那么這樣表1就是主表,表2就是子表。所以結(jié)合2張表就能保持數(shù)據(jù)的一致性、完整性(估計就是還原成原來的那張大表)。
專注于為中小企業(yè)提供成都網(wǎng)站設計、成都網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)青原免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
借著這個例子再談談外鍵的一些事項:
1、表1可以有一個或者多個外鍵,也可以沒有。(如果表1有多個外鍵可不可以是這樣的情況,表2中的多個字段是表1的外鍵;或者說表1的多個外鍵是在多個表中)
2、這個外鍵可以不是表1的主鍵,但必須是子表的主鍵。(簡單的說就是,如果一個字段是某個表的外鍵時,那么該字段必須是主鍵)
數(shù)據(jù)庫mysql
建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。
外鍵作用:使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!
指定主鍵關(guān)鍵字:foreignkey(列名)
引用外鍵關(guān)鍵字:references外鍵表名(外鍵列名)
事件觸發(fā)限制:ondelete和onupdate,可設參數(shù)cascade(跟隨外鍵改動),restrict(限制外表中的外鍵改動),setNull(設空值),setDefault(設默認值),[默認]noaction
例如:
outTable表主鍵id類型int
創(chuàng)建含有外鍵的表:
createtabletemp(
idint,
namechar(20),
foreignkey(id)referencesoutTable(id)ondeletecascadeonupdatecascade);
說明:把id列設為外鍵參照外表outTable的id列當外鍵的值刪除本表中對應的列篩除當外鍵的值改變本表中對應的列值改變。
自己實踐才能完全了解外鍵的作用關(guān)鍵是:事件觸發(fā)限制的作用
為已經(jīng)添加好的數(shù)據(jù)表添加外鍵:
語法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對應的表的主鍵字段名);
例: 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ā)生什么?
很明顯,那些記錄也應該被刪除,否則在數(shù)據(jù)庫中就會有很多無意義的孤立記錄,MYSQL可以通過向FOREIGN KEY...REFERENCES修飾符添加一個ON DELETE 或ON UPDATE子句簡化任務,它告訴了數(shù)據(jù)庫在這種情況如何處理孤立任務。
工具/原料
電腦??MySQL
方法/步驟
設置主鍵:
1、通過終端進入到mysql命令行工具。
2、通過use關(guān)鍵字進行到目標數(shù)據(jù)庫里。
3、如原表已有主鍵,先把原來的主鍵刪除掉,通過DROPPRIMARYKEY命令:ALTERTABLE`jingyan`DROPPRIMARYKEY;。
4、主鍵已經(jīng)沒有了。
5、通過命令:ADDPRIMARYKEY來添加ALTERTABLE`jingyan`ADDPRIMARYKEY(`id`)。
6、輸入后按下回車鍵即可看到queryok執(zhí)行成功的字符。
7、回到數(shù)據(jù)庫的可視化工具,即可顯示現(xiàn)在的表在id列上添加了主鍵了。
設置外鍵:
1、創(chuàng)建好主從表。
2、選擇主表,點擊設計表,進入到表設計界面。
3、點擊外鍵,進入到外鍵設置界面。
4、先設置外鍵名稱和選擇主表的外鍵字段。
5、然后在設置外鍵字段對應從表的數(shù)據(jù)庫、表名和字。
6、點擊保存就完成外鍵設置了。
通過工具NAVICAT 設計表時進行設計
打開NAVICAT,連接數(shù)據(jù)庫
右鍵目標表,選擇設計表
打開后選擇外鍵菜單,具體如圖:
分別設置外鍵名,字段,關(guān)聯(lián)數(shù)據(jù)庫、表、字段,以及刪除時操作,更新時操作方式然后點擊保存按鈕即可
也可以通過SQL方式完成對表外鍵的添加,如:
語法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對應的表的主鍵字段名);