MySQL外鍵設(shè)置的方法實(shí)例
一、外鍵設(shè)置方法
1、在MySQL中,為了把2個(gè)表關(guān)聯(lián)起來(lái),會(huì)用到2個(gè)重要的功能:外鍵(FOREIGN KEY)和連接(JOIN)。外鍵需要在創(chuàng)建表的階段定義,連接可以通過(guò)相同意義的字段把2個(gè)表連接起來(lái),用在查詢階段。
2、假設(shè)有2個(gè)表,分別是表A和表B,它們通過(guò)一個(gè)公共字段id 發(fā)生關(guān)聯(lián)關(guān)系,我們把這個(gè)關(guān)聯(lián)關(guān)系叫做R。如果id在表A中是主鍵,那么表A就是這個(gè)關(guān)系R中的主表,相應(yīng)的,表B就是這個(gè)關(guān)系中的從表,表B中的id,就是表B用來(lái)引用表A中數(shù)據(jù)的,叫外鍵。所以,外鍵就是從表中用來(lái)引用主表中數(shù)據(jù)的那個(gè)公共字段。
創(chuàng)建主表
CREATE TABLE demo.importhead ( listnumber INT PRIMARY KEY, supplierid INT, stocknumber INT, importtype INT, importquantity DECIMAL(10 , 3 ), importvalue DECIMAL(10 , 2 ), recorder INT, recordingdate DATETIME);
創(chuàng)建從表
CREATE TABLE demo.importdetails( listnumber INT, itemnumber INT, quantity DECIMAL(10,3), importprice DECIMAL(10,2), importvalue DECIMAL(10,2), -- 定義外鍵約束,指出外鍵字段和參照的主表字段 CONSTRAINT fk_importdetails_importhead FOREIGN KEY (listnumber) REFERENCES importhead (listnumber) );
運(yùn)行這個(gè)SQL語(yǔ)句,我們就在創(chuàng)建表的同時(shí)定義了一個(gè)名字叫fk_importdetails_importhead的外鍵約束,同時(shí),我們聲明,這個(gè)外鍵約束的字段listnumber引用的是表importhead里面的字段listnumber。
創(chuàng)建完成后,我們可以通過(guò)SQL語(yǔ)句來(lái)查看,這里我們要用到MySQL自帶的、用于存儲(chǔ)系統(tǒng)信息的數(shù)據(jù)庫(kù):
information_schema。我們可以查看外鍵約束的相關(guān)信息:
外鍵約束所在的表是importdetails,外鍵字段是listnumber
參照的主表是importhead,參照主表字段是listnumber,
這樣通過(guò)定義外鍵約束,我們已經(jīng)建立起了2個(gè)表之間的關(guān)聯(lián)關(guān)系。
3、連接
在MySQL中有2種類型的連接,分別是內(nèi)連接(INNER JOIN)和外連接(OUTER JOIN)
- 內(nèi)連接表示查詢結(jié)果只返回符合連接條件的記錄,這種連接方式比較常用;
- 外連接則不同,表示查詢結(jié)果返回某一個(gè)表中的所有記錄,以及另一個(gè)表中滿足連接條件的記錄。
定義外鍵時(shí),需要遵守下列規(guī)則:
- 主表必須已經(jīng)存在于數(shù)據(jù)庫(kù)中,或者是當(dāng)前正在創(chuàng)建的表。如果是后一種情況,則主表與從表是同一個(gè)表,這樣的表稱為自參照表,這種結(jié)構(gòu)稱為自參照完整性。
- 必須為主表定義主鍵。
- 主鍵不能包含空值,但允許在外鍵中出現(xiàn)空值。也就是說(shuō),只要外鍵的每個(gè)非空值出現(xiàn)在指定的主鍵中,這個(gè)外鍵的內(nèi)容就是正確的。
- 在主表的表名后面指定列名或列名的組合。這個(gè)列或列的組合必須是主表的主鍵或候選鍵。
- 外鍵中列的數(shù)目必須和主表的主鍵中列的數(shù)目相同。
- 外鍵中列的數(shù)據(jù)類型必須和主表主鍵中對(duì)應(yīng)列的數(shù)據(jù)類型相同。
總結(jié)
到此這篇關(guān)于MySQL外鍵設(shè)置的文章就介紹到這了,更多相關(guān)MySQL外鍵設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql使用全文索引(FullText?index)的實(shí)例代碼
使用索引時(shí)數(shù)據(jù)庫(kù)性能優(yōu)化的必備技能之一,下面這篇文章主要給大家介紹了關(guān)于Mysql使用全文索引(FullText?index)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04一個(gè)案例徹底弄懂如何正確使用mysql inndb聯(lián)合索引
今天小編就為大家分享一篇關(guān)于一個(gè)案例徹底弄懂如何正確使用mysql inndb聯(lián)合索引,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02MySQL學(xué)習(xí)記錄之KEY分區(qū)引發(fā)的血案
這篇文章主要給大家介紹了關(guān)于MySQL學(xué)習(xí)記錄之KEY分區(qū)引發(fā)的血案的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11MySQL分組查詢獲取每組最新的一條數(shù)據(jù)詳解(group?by)
在寫報(bào)表功能時(shí)遇到一個(gè)需要根據(jù)用戶id分組查詢最新一條錢包明細(xì)數(shù)據(jù)的需求,下面這篇文章主要給大家介紹了關(guān)于MySQL分組查詢獲取每組最新的一條數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2024-08-08Mysql數(shù)據(jù)庫(kù)表定期備份的實(shí)現(xiàn)詳解
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)表定期備份的實(shí)現(xiàn)詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能
這篇文章主要介紹了使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下方法2020-03-03MySQL 5.7安裝好后打開(kāi)命令行窗口閃退的解決方法
這篇文章主要給大家介紹了關(guān)于MySQL 5.7安裝好后打開(kāi)命令行窗口閃退的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧2018-12-12Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)
mysql中計(jì)算字符串長(zhǎng)度有兩個(gè)函數(shù)分別為char_length和length,char_length函數(shù)可以計(jì)算unicode字符,下面這篇文章主要給大家介紹了關(guān)于Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-05-05