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 ใน 2 วิธี:
- สตูดิโอจัดการเซิร์ฟเวอร์ SQL
- T-SQL
สตูดิโอจัดการเซิร์ฟเวอร์ SQL
ตารางหลัก: สมมติว่าเรามีตารางหลักเป็น 'หลักสูตร' Course_ID และ Course_name เป็นสองคอลัมน์ที่มี Course_Id เป็นคีย์หลัก
ตารางเด็ก: เราจำเป็นต้องสร้างตารางที่สองเป็นตารางลูก 'Course_ID' และ 'Course_Strength' เป็นสองคอลัมน์ อย่างไรก็ตาม 'Course_ID' จะเป็น Foreign Key
ขั้นตอน 1) คลิกขวาที่ตาราง>ใหม่> ตาราง...
ขั้นตอน 2) ป้อนชื่อคอลัมน์สองคอลัมน์เป็น 'Course_ID' และ 'Course_Strength' คลิกขวาที่คอลัมน์ 'Course_Id' ตอนนี้คลิกที่ความสัมพันธ์
ขั้นตอน 3) In 'ความสัมพันธ์ที่สำคัญต่างประเทศ,' คลิก 'เพิ่ม'
ขั้นตอน 4) ใน 'ข้อมูลจำเพาะของตารางและคอลัมน์' คลิกที่ ไอคอน '…'
ขั้นตอน 5) เลือก 'ตารางคีย์หลัก' เป็น 'หลักสูตร' และตอนนี้ตารางใหม่จะถูกสร้างขึ้นเป็น 'ตารางคีย์ต่างประเทศ' จากเมนูแบบเลื่อนลง
ขั้นตอน 6) 'ตารางคีย์หลัก' – เลือกคอลัมน์ 'Course_Id' เป็นคอลัมน์ 'ตารางคีย์หลัก'
'ตารางคีย์ต่างประเทศ'- เลือกคอลัมน์ 'Course_Id' เป็นคอลัมน์ 'ตารางคีย์ต่างประเทศ' คลิกตกลง
ขั้นตอน 7) คลิกที่ เพิ่ม
ขั้นตอน 8) ตั้งชื่อตารางเป็น 'Course_Strength' แล้วคลิก ตกลง
ผลลัพธ์: เราได้กำหนดความสัมพันธ์ระหว่างพ่อแม่และลูกระหว่าง 'คอร์ส' และ 'หลักสูตร_ความแข็งแกร่ง'
T-SQL: สร้างตารางหลัก-รองโดยใช้ T-SQL
ตารางหลัก: ลองพิจารณาใหม่ เรามีตารางหลักที่มีอยู่ซึ่งมีชื่อตารางเป็น 'หลักสูตร'
Course_ID และ Course_name เป็นสองคอลัมน์ที่มี Course_Id เป็นคีย์หลัก
ตารางเด็ก: เราจำเป็นต้องสร้างตารางที่สองเป็นตารางลูกที่มีชื่อเป็น '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) เรียกใช้แบบสอบถามโดยคลิกที่ดำเนินการ
ผลลัพธ์: เราได้กำหนดความสัมพันธ์ระหว่างพ่อแม่และลูกระหว่าง 'คอร์ส' และ 'หลักสูตร_ความแข็งแกร่ง_TSQL'
การใช้ 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'
เราจะพยายามแทรกแถวสองประเภท
- ประเภทแรก ซึ่ง Course_Id ในตารางลูกจะมีอยู่ใน Course_Id ของตาราง Parent เช่น Course_Id = 1 และ 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.
- นี่คือความแตกต่างระหว่างคีย์หลักกับคีย์ต่างประเทศ: คลิกที่นี่