SQL FOREIGN KEY: วิธีสร้างใน SQL Server พร้อมตัวอย่าง

คีย์ต่างประเทศคืออะไร?

A ต่างประเทศที่สำคัญ จัดเตรียมวิธีการบังคับใช้ Referential Integrity ภายใน SQL Server กล่าวง่ายๆ ก็คือ Foreign Key ช่วยให้มั่นใจได้ว่าค่าในตารางหนึ่งจะต้องปรากฏในอีกตารางหนึ่ง

กฎสำหรับคีย์ต่างประเทศ

  • อนุญาตให้ใช้ NULL ในคีย์ SQL Foreign
  • ตารางที่ถูกอ้างอิงเรียกว่าตารางหลัก
  • ตารางที่มี Foreign Key ใน SQL เรียกว่า Child Table
  • SQL Foreign Key ในตารางลูกอ้างอิงคีย์หลักในตารางหลัก
  • ความสัมพันธ์ระหว่างพ่อแม่และลูกนี้บังคับใช้กฎที่เรียกว่า "การอ้างอิง" Integrity".

ตัวอย่าง Foreign Key ใน SQL ด้านล่างพร้อมไดอะแกรมสรุปประเด็นทั้งหมดข้างต้นสำหรับ FOREIGN KEY

กฎสำหรับคีย์ต่างประเทศใน SQL
วิธีการทำงานของคีย์ต่างประเทศ

วิธีสร้างคีย์ต่างประเทศใน SQL

เราสามารถสร้าง ต่างประเทศที่สำคัญ ในเซิร์ฟเวอร์ SQL ใน 2 วิธี:

  1. สตูดิโอจัดการเซิร์ฟเวอร์ SQL
  2. T-SQL

สตูดิโอจัดการเซิร์ฟเวอร์ SQL

ตารางหลัก: สมมติว่าเรามีตารางหลักเป็น 'หลักสูตร' Course_ID และ Course_name เป็นสองคอลัมน์ที่มี Course_Id เป็นคีย์หลัก

สร้างคีย์ต่างประเทศใน SQL

ตารางเด็ก: เราจำเป็นต้องสร้างตารางที่สองเป็นตารางลูก 'Course_ID' และ 'Course_Strength' เป็นสองคอลัมน์ อย่างไรก็ตาม 'Course_ID' จะเป็น Foreign Key

ขั้นตอน 1) คลิกขวาที่ตาราง>ใหม่> ตาราง...

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 2) ป้อนชื่อคอลัมน์สองคอลัมน์เป็น 'Course_ID' และ 'Course_Strength' คลิกขวาที่คอลัมน์ 'Course_Id' ตอนนี้คลิกที่ความสัมพันธ์

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 3) In 'ความสัมพันธ์ที่สำคัญต่างประเทศ,' คลิก 'เพิ่ม'

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 4) ใน 'ข้อมูลจำเพาะของตารางและคอลัมน์' คลิกที่ ไอคอน '…'

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 5) เลือก 'ตารางคีย์หลัก' เป็น 'หลักสูตร' และตอนนี้ตารางใหม่จะถูกสร้างขึ้นเป็น 'ตารางคีย์ต่างประเทศ' จากเมนูแบบเลื่อนลง

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 6) 'ตารางคีย์หลัก' – เลือกคอลัมน์ 'Course_Id' เป็นคอลัมน์ 'ตารางคีย์หลัก'

'ตารางคีย์ต่างประเทศ'- เลือกคอลัมน์ 'Course_Id' เป็นคอลัมน์ 'ตารางคีย์ต่างประเทศ' คลิกตกลง

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 7) คลิกที่ เพิ่ม

สร้างคีย์ต่างประเทศใน SQL

ขั้นตอน 8) ตั้งชื่อตารางเป็น 'Course_Strength' แล้วคลิก ตกลง

สร้างคีย์ต่างประเทศใน SQL

ผลลัพธ์: เราได้กำหนดความสัมพันธ์ระหว่างพ่อแม่และลูกระหว่าง 'คอร์ส' และ 'หลักสูตร_ความแข็งแกร่ง'

สร้างคีย์ต่างประเทศใน SQL

T-SQL: สร้างตารางหลัก-รองโดยใช้ T-SQL

ตารางหลัก: ลองพิจารณาใหม่ เรามีตารางหลักที่มีอยู่ซึ่งมีชื่อตารางเป็น 'หลักสูตร'

Course_ID และ Course_name เป็นสองคอลัมน์ที่มี Course_Id เป็นคีย์หลัก

สร้างตารางหลัก-รองโดยใช้ T-SQL

ตารางเด็ก: เราจำเป็นต้องสร้างตารางที่สองเป็นตารางลูกที่มีชื่อเป็น 'Course_Strength_TSQL'

'Course_ID' และ 'Course_Strength' เป็นสองคอลัมน์สำหรับตารางลูก Course_Strength_TSQL' อย่างไรก็ตาม 'Course_ID' จะเป็น Foreign Key

ด้านล่างนี้เป็นไวยากรณ์สำหรับสร้างตารางด้วย FOREIGN KEY

ไวยากรณ์:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

นี่คือคำอธิบายของพารามิเตอร์ข้างต้น:

  • childTable คือชื่อของตารางที่จะสร้าง
  • column_1, column_2- คอลัมน์ที่จะเพิ่มลงในตาราง
  • fkey_name- ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง
  • child_column1, child_column2…child_column_n- ชื่อของคอลัมน์ chidTable ที่จะอ้างอิงคีย์หลักใน parentTable
  • parentTable- ชื่อของตารางหลักที่จะอ้างอิงคีย์ในตารางลูก
  • parent_column1, parent_column2, … parent_column3- คอลัมน์ที่ประกอบขึ้นเป็นคีย์หลักของตารางหลัก
  • เมื่อลบ พารามิเตอร์ทางเลือก โดยระบุสิ่งที่เกิดขึ้นกับข้อมูลลูกหลังจากการลบข้อมูลหลัก ค่าบางค่าสำหรับพารามิเตอร์นี้ได้แก่ NO ACTION, SET NULL, CASCADE หรือ SET DEFAULT
  • ON UPDATE- พารามิเตอร์ทางเลือก โดยจะระบุสิ่งที่เกิดขึ้นกับข้อมูลลูกหลังจากอัปเดตข้อมูลพาเรนต์ ค่าบางค่าสำหรับพารามิเตอร์นี้ได้แก่ NO ACTION, SET NULL, CASCADE หรือ SET DEFAULT
  • ไม่มีการดำเนินการ- ใช้ร่วมกับ ON DELETE และ ON UPDATE หมายความว่าจะไม่มีอะไรเกิดขึ้นกับข้อมูลลูกหลังจากการอัพเดตหรือการลบข้อมูลพาเรนต์
  • CASCADE- ใช้ร่วมกับ ON DELETE และ ON UPDATE ข้อมูลลูกจะถูกลบหรืออัปเดตหลังจากที่ข้อมูลหลักถูกลบหรืออัปเดตแล้ว
  • SET NULL- ใช้ร่วมกับ ON DELETE และ ON UPDATE ลูกจะถูกตั้งค่าเป็นโมฆะหลังจากอัปเดตหรือลบข้อมูลหลักแล้ว
  • SET DEFAULT- ใช้ร่วมกับ ON DELETE และ ON UPDATE ข้อมูลลูกจะถูกตั้งค่าเป็นค่าเริ่มต้นหลังการอัปเดตหรือลบข้อมูลหลัก

เรามาดู Foreign Key ในตัวอย่าง SQL เพื่อสร้างตารางที่มี One Column เป็น FOREIGN KEY:

ตัวอย่าง Foreign Key ใน SQL

ค้นหา:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

ขั้นตอน 1) เรียกใช้แบบสอบถามโดยคลิกที่ดำเนินการ

คีย์ต่างประเทศใน SQL

ผลลัพธ์: เราได้กำหนดความสัมพันธ์ระหว่างพ่อแม่และลูกระหว่าง 'คอร์ส' และ 'หลักสูตร_ความแข็งแกร่ง_TSQL'

คีย์ต่างประเทศใน SQL

การใช้ ALTER TABLE

ตอนนี้เราจะเรียนรู้วิธีใช้ Foreign Key ใน SQL และเพิ่ม Foreign Key ในเซิร์ฟเวอร์ SQL โดยใช้คำสั่ง ALTER TABLE เราจะใช้ไวยากรณ์ที่ระบุด้านล่าง:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

นี่คือคำอธิบายของพารามิเตอร์ที่ใช้ด้านบน:

  • childTable คือชื่อของตารางที่จะสร้าง
  • column_1, column_2- คอลัมน์ที่จะเพิ่มลงในตาราง
  • fkey_name- ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง
  • child_column1, child_column2…child_column_n- ชื่อของคอลัมน์ chidTable ที่จะอ้างอิงคีย์หลักใน parentTable
  • parentTable- ชื่อของตารางหลักที่จะอ้างอิงคีย์ในตารางลูก
  • parent_column1, parent_column2, … parent_column3- คอลัมน์ที่ประกอบขึ้นเป็นคีย์หลักของตารางหลัก

แก้ไขตารางเพิ่มตัวอย่าง Foreign Key:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

เราได้สร้างคีย์ต่างประเทศชื่อ fkey_student_admission บนตารางแผนก คีย์ต่างประเทศนี้อ้างอิงถึงคอลัมน์การรับเข้าของตารางนักเรียน

ตัวอย่างแบบสอบถามคีย์ต่างประเทศ

ขั้นแรก มาดูข้อมูลตารางหลักของเรา หลักสูตร

ค้นหา:

SELECT * from COURSE;

ตัวอย่างแบบสอบถามคีย์ต่างประเทศ

ตอนนี้เรามาแทรกแถวในตารางลูก: 'หลักสูตร_ความแข็งแกร่ง_TSQL'

เราจะพยายามแทรกแถวสองประเภท

  1. ประเภทแรก ซึ่ง Course_Id ในตารางลูกจะมีอยู่ใน Course_Id ของตาราง Parent เช่น Course_Id = 1 และ 2
  2. ประเภทที่สอง ซึ่ง Course_Id ในตารางลูกไม่มีอยู่ใน Course_Id ของตาราง Parent เช่น Course_Id = 5

ค้นหา:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

ตัวอย่างแบบสอบถามคีย์ต่างประเทศ

ผลลัพธ์: มาเรียกใช้แบบสอบถามร่วมกันเพื่อดูตารางหลักและรองของเรา

แถวที่มี Course_ID 1 และ 2 มีอยู่ในตาราง Course_strength ในขณะที่ Course_ID 5 ถือเป็นข้อยกเว้น

ตัวอย่างแบบสอบถามคีย์ต่างประเทศ

สรุป

  • ทุกค่าของคีย์ต่างประเทศจะต้องเป็นส่วนหนึ่งของ คีย์หลัก ของโต๊ะอื่นๆ
  • บริษัท MySQL Foreign Key สามารถอ้างอิงไปยังคอลัมน์อื่นในตารางเดียวกันได้ การอ้างอิงนี้เรียกว่าการอ้างอิงตนเอง
  • ข้อ จำกัด ของคีย์ต่างประเทศของ SQL : ใช้เพื่อรักษาความปลอดภัยการเชื่อมโยงระหว่างตารางและข้อมูลที่ไม่ถูกต้องที่จะแทรกลงในคอลัมน์คีย์ต่างประเทศ
  • คุณสามารถสร้าง Foreign Key ได้โดยใช้ Create Table, Alter Table หรือ สตูดิโอจัดการเซิร์ฟเวอร์ SQL.
  • นี่คือความแตกต่างระหว่างคีย์หลักกับคีย์ต่างประเทศ: คลิกที่นี่