數據庫新手必知!輕松學習SQL外鍵約束的核心原理和實用技巧

2024年2月6日 19点热度 0人点赞

SQL 約束-外鍵約束

簡介

外鍵約束(FOREIGN KEY,縮寫 FK)是用來實現數據庫表的參照完整性的。它是指表中某個字段的值依賴於另一張表中某個字段的值,而被依賴的字段必須且有主鍵約束或者唯一約束。被依賴的表通常稱之為父表或者主表,設置外鍵約束的表稱為子表或從表。

相關概念

  • 主鍵:可以唯一標識一條記錄的列
  • 外鍵:從表中與主表的主鍵對應的字段
  • 主表:外鍵所指向的表,約束其他表的表
  • 從表:外鍵所在的表,被約束的表
  • 價值:建立主表與從表的關聯關系,為兩個表的數據建立連接,約束兩個表中數據的一致性和完整性

建立外鍵約束

  • 創建表時添加外鍵約束:CONSTRAINT``[外鍵約束的名稱] FOREIGN KEY (外鍵字段) REFERENCES [主表名稱(主鍵字段)]
  • 添加外鍵約束:ALTER TABLE [表名] ADD CONSTRAINT [外鍵約束的名稱]``FOREIGN KEY``[外鍵字段] REFERENCES [主表名稱(主鍵字段)]
#創建一個關聯到主表的從表
CREATETABLEemp_part(
emp_idINTPRIMARYKEYAUTO_INCREMENT,
enameVARCHAR(20),
ageINT,
genderVARCHAR(10),
dept_idINT,
-- 添加外鍵約束
CONSTRAINTemp_deptFOREIGNKEY(dept_id)REFERENCESdept(id)
);
#插入一條非法數據
INSERTINTOemp_partVALUES(1,'cindy',20,'female','4')

刪除外鍵約束

  • 語法:
ALTER TABLE [表名] DROP FOREIGN KEY [外鍵約束名稱]
  • 註意事項 從表外鍵數據類型必須與主表的主鍵一致 刪除數據時,需先刪除從表數據再刪除主表的數據 添加數據時先添加主表數據,再添加從表數據
#刪除外鍵約束
ALTERTABLEemp_partDROPFOREIGNKEYemp_dept
#插入一條非法數據
INSERTINTOemp_partVALUES(1,'cindy',20,'female','4')
SELECT*FROMemp_part
#向主表中插入一條數據
INSERTINTOdeptVALUES(2,'運營部','張三','北京')
#向從表中插入一條數據
INSERTINTOemp_partVALUES(1,'cindy',20,'female','2')
#刪除主表中的數據
DELETEFROMdeptWHEREid=2

級聯刪除

  • 刪除主表數據的同時,也刪除掉從表中相關的數據 ON DELETE CASCADE
#創建員工信息表並添加級聯刪除的外鍵約束
CREATETABLEemp_part(
emp_idINTPRIMARYKEYAUTO_INCREMENT,
enameVARCHAR(20),
ageINT,
genderVARCHAR(10),
dept_idINT,
-- 添加外鍵約束
CONSTRAINTemp_deptFOREIGNKEY(dept_id)REFERENCESdept(id)
-- 設置允許級聯刪除
ONDELETECASCADE
);
#向員工信息表中添加一條數據
INSERTINTOemp_partVALUES(1,'cindy',20,'female','2')
#刪除主表中部門id=2的部門
DELETEFROMdeptWHEREid=2
#查看從表中的數據是否同時被刪除
SELECT*FROMemp_part

總結

SQL 中的外鍵約束是一種參照完整性約束,它用於確保兩個表之間的數據一致性,構建了一種父子關系。當在子表中插入或更新數據時,外鍵約束確保所提供的外鍵值必須在父表的相應主鍵或唯一鍵值范圍內。如果父表中不存在相應的值,則操作將失敗,從而確保了數據的完整性和一致性。

霍格沃茲的測試管理班是專門面向測試與質量管理人員的一門課程,通過提升從業人員的團隊管理、項目管理、績效管理、溝通管理等方面的能力,使測試管理人員可以更好的帶領團隊、項目以及公司獲得更快的成長。提供 1v1 私教指導,BAT 級別的測試管理大咖量身打造職業規劃。