บทช่วยสอนนี้จะแนะนำวิธีใช้ Foreign Key foreign Key ใน SQL Server พร้อมไวยากรณ์และตัวอย่าง
คีย์นอกใน SQL Server คืออะไร
คีย์ต่างประเทศใช้เพื่อเพิ่มการอ้างอิงในฐานข้อมูล SQL Server คีย์นอกหมายความว่าค่าในตารางนี้ต้องปรากฏในตารางอื่น
ตารางอ้างอิงเรียกว่าตารางพาเรนต์ ในขณะที่ตารางที่มีคีย์นอกจะเรียกว่าตารางย่อย คีย์ต่างประเทศในตารางลูกมักจะอ้างถึงคีย์หลัก PRIMARY KEY ในตารางหลัก
คีย์ต่างประเทศสามารถสร้างได้ด้วยคำสั่ง CREATE TABLE หรือคำสั่ง ALTER TABLE
สร้างคีย์นอกโดยใช้คำสั่ง CREATE TABLE
ไวยากรณ์
CREATE TABLE bang_con ( cot1 kieudulieu [ NULL | NOT NULL ], cot2 kieudulieu [ NULL | NOT NULL ], … CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n) [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] );
bang_con
ชื่อของตารางย่อยที่คุณต้องการสร้าง
cot1, cot2
คอลัมน์ที่คุณต้องการสร้างในตาราง แต่ละคอลัมน์มี 1 ประเภทข้อมูล ต้องระบุเพื่อให้มีค่า NULL หรือ NOT NULL มิฉะนั้น ค่าเริ่มต้นจะเป็น NULL
ประเภทข้อมูลใน SQL Server
fk_ten
ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง
cot_con1, cot_con2, . cot_con_n
คอลัมน์ใน bang_con ต้องการอ้างถึงคีย์หลักใน bang_me
bang_me
ชื่อของตารางหลักมีคีย์หลักที่ใช้ใน bang_con
cot_me1, cot_me2, . cot_me_n
คอลัมน์ที่ประกอบเป็นคีย์หลักใน bang_me Foreign Key จะสร้างข้อจำกัดระหว่าง data และคอลัมน์ cot_con1, cot_con2, . cot_con_n ใน bang_con
เปิดการลบ
ตัวเลือก ระบุว่าจะทำอย่างไรกับข้อมูลย่อยเมื่อข้อมูลหลักถูกลบ มีตัวเลือก NO ACTION, CASCADE, SET NULL และ SET DEFAULT
กำลังอัปเดต
ตัวเลือก ระบุว่าจะทำอย่างไรกับข้อมูลย่อยเมื่อมีการอัพเดตข้อมูลหลัก มีตัวเลือก NO ACTION, CASCADE, SET NULL และ SET DEFAULT
ไม่มีการดำเนินการ
ใช้กับ ON DELETE หรือ ON UPDATE นั่นคือไม่ทำอะไรกับข้อมูลลูกเมื่อข้อมูลหลักถูกลบหรืออัปเดต
CASCADE
ใช้กับ ON DELETE หรือ ON UPDATE ซึ่งหมายความว่าข้อมูลลูกจะถูกลบหรืออัปเดตเมื่อข้อมูลหลักถูกลบหรืออัปเดต
ตั้งค่าเป็นโมฆะ
ใช้กับ ON DELETE หรือ ON UPDATE หมายความว่าข้อมูลลูกถูกตั้งค่าเป็น NULL เมื่อข้อมูลหลักถูกลบหรืออัปเดต
ตั้งค่าเริ่มต้น
ใช้กับ ON DELETE หรือ ON UPDATE หมายความว่าข้อมูลลูกถูกตั้งค่าเป็นค่าเริ่มต้นเมื่อข้อมูลหลักถูกลบหรืออัปเดต
- Foreign Key (Cascade Delete) ใน SQL Server
- Foreign Key (Set Null) foreign key ใน SQL Server
ตัวอย่างเช่น
CREATE TABLE sanpham (id_sanpham INT PRIMARY KEY, ten_sanpham VARCHAR(50) NOT NULL, phan_loai VARCHAR(25) ); CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY, id_sanpham INT NOT NULL, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) );
ในตัวอย่างข้างต้น เราสร้างตารางพาเรนต์ ซึ่งเป็นตาราง sanpham ที่มีคีย์หลักประกอบด้วยฟิลด์ใน id_sanpham ถัดมาเป็นโต๊ะย่อยหางคอ
คำสั่ง CREATE TABLE ที่ใช้สร้าง foreign key ของตาราง hangtonkho มีชื่อว่า fk_htk_id_sanpham คีย์นอกจะสร้างลิงก์ระหว่างคอลัมน์ id_sanpham ในตาราง hangtonkho และ id_sanpham ในตาราง sanpham
ตัวอย่างด้านบนแสดงวิธีสร้างคีย์นอกที่ประกอบด้วย 1 คอลัมน์ ตอนนี้สร้างคีย์ต่างประเทศที่มีมากกว่า 1 ช่องข้อมูล
ตัวอย่างเช่น
CREATE TABLE sanpham ( ten_sanpham VARCHAR(50) NOT NULL, diadiem VARCHAR(50) NOT NULL, phanloai VARCHAR(25) CONSTRAINT sanpham_pk PRIMARY KEY (ten_sanpham, diadiem) );
CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY, ten_sanpham VARCHAR(50) NOT NULL, diadiem VARCHAR(50) NOT NULL, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem) REFERENCES sanpham (ten_sanpham, diadiem) );
ในตัวอย่างนี้ ตารางพาเรนต์ sanpham มีคีย์หลักสองคอลัมน์ ten_sanpham และ didiem ตารางลูกและคีย์นอกต้องอ้างอิงถึงสองคอลัมน์นี้
สร้างคีย์นอกโดยใช้คำสั่ง ALTER TABLE
ไวยากรณ์
ALTER TABLE bang_con ADD CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n);
bang_con
ชื่อของตารางย่อยที่คุณต้องการสร้าง
fk_ten
ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง
cot_con1, cot_con2, . cot_con_n
คอลัมน์ใน bang_con ต้องการอ้างถึงคีย์หลักใน bang_me
bang_me
ชื่อของตารางหลักมีคีย์หลักที่ใช้ใน bang_con
cot_me1, cot_me2, . cot_me_n
คอลัมน์ที่ประกอบเป็นคีย์หลักใน bang_me Foreign Key จะสร้างข้อจำกัดระหว่าง data และคอลัมน์ cot_con1, cot_con2, . cot_con_n ใน bang_con
ตัวอย่างเช่น
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham);
ตัวอย่างนี้สร้าง foreign key ในตาราง hangtonkho ชื่อ fk_htk_id_sanpham โดยอ้างอิงตาราง sanpham ตามคอลัมน์ id_sanpham
คุณสามารถสร้างคีย์นอกที่มีมากกว่า 1 ฟิลด์ดังตัวอย่างด้านล่าง
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem) REFERENCES sanpham (ten_sanpham, diadiem);
ตัวอย่างด้านบนสร้างคีย์ต่างประเทศชื่อ fk_htk_sanpham สำหรับตาราง hangtonkho โดยอ้างอิงถึงแดชบอร์ดตามคอลัมน์ ten_sanpham และ diadiem