外鍵是六大約束中的一種,它也是一種限制,用於限制表中的數據,爲了保證表中的數據的準確性和可靠性
舉個例子
我們先執行下面的代碼,來創建專業表major和學生信息表stuinfo
CREATE TABLE IF NOT EXISTS major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20),
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);
我們通過下面的代碼查看索引信息
SHOW INDEX FROM stuinfo;
可見,學生信息表stuinfo中的外鍵已經添加成功,我們往專業表major中插入數據
INSERT INTO major VALUES(1,'Java');
INSERT INTO major VALUES(2,'H5');
INSERT INTO major VALUES(3,'JS');
添加成功後,我們開始往學生信息表中添加數據
INSERT INTO stuinfo VALUES (001,'Alice',3);
添加成功,好,我們再來添加一條數據
INSERT INTO stuinfo VALUES (002,'Boily',4);
然而,錯誤了
大家看這個錯誤報告,a foreign key,哦,外鍵在起作用!
所以,這個關鍵是幹啥的呢?是這樣,它是規範學生信息表中字段major的信息規範的,假如專業表major中有三條記錄,即{1,‘JAVA’},{2,‘H5’},{3,‘JS’},當我們在學生信息表中插入數據時,如果專業編號majorId=4,那麼不就出現問題了麼,4號…,沒有啊!!!
這就是外鍵,相信大家也理解了,下面咱們來談談它的特點
首先呢,我們必須瞭解約束添加的分類,有兩種列級約束和表級約束,外鍵添加時必須採用表級約束,用列級約束添加是沒有效果的。
特點一:
要求在從表中添加外鍵關係,比如上面的學生信息表就是從表,而專業表則是主表
特點二:
從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求,這點應該很容易理解吧,比如人和人才能交流吧,你不能和佩奇侃吧!
特點三:
主表的關聯列必須是一個key(一般是主鍵或唯一),好,咱們來試一下
DROP TABLE IF EXISTS major;
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS major(
id INT ,
majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20),
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);
上述代碼執行後,會報一個錯誤
這就是從表學生信息表中專業編號的外鍵所關聯的主表的關聯列不是一個鍵
特點四:
插入數據時,先插入主表,再插入從表,刪除數據時,先刪除從表,再刪除主表,這點也很容易理解吧,那咱們關於外鍵的特點就先說到這裏!