Foreign Key (FK) เป็น Constraint ที่รักษา Referential Integrity ระหว่างตาราง Child (มี FK) และ Parent (มี PK ที่ถูกอ้างอิง)
สร้างตาราง Parent และ Child
-- Parent Table
mysql> CREATE TABLE College (
-> StudentFKPK INT,
-> CourseId INT,
-> CourseName VARCHAR(200),
-> CollegeName VARCHAR(200),
-> PRIMARY KEY(StudentFKPK)
-> );
-- Child Table
mysql> CREATE TABLE StudentEnrollment (
-> StudentId INT,
-> StudentName VARCHAR(200),
-> StudentFKPK INT
-> );
เพิ่ม Foreign Key Constraint
mysql> ALTER TABLE StudentEnrollment
-> ADD CONSTRAINT StudCollegeConst
-> FOREIGN KEY (StudentFKPK) REFERENCES College(StudentFKPK);
ตรวจสอบ FK ที่สร้าง
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME,
REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'College';
ผลลัพธ์:
+-------------------+-------------+------------------+-----------------------+------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME | +-------------------+-------------+------------------+-----------------------+------------------------+ | StudentEnrollment | StudentFKPK | StudCollegeConst | College | StudentFKPK | +-------------------+-------------+------------------+-----------------------+------------------------+
พฤติกรรมสำคัญ
- INSERT ลง Child ต้องมีค่า FK ที่มีอยู่ใน Parent ถ้าไม่มี → ERROR 1452
- DELETE/UPDATE ใน Parent ที่มี Child อ้างอิง → ต้องกำหนด
ON DELETE CASCADEหรือSET NULLหรือRESTRICT(Default)
Best Practice: ควรสร้าง FK ตอน CREATE TABLE เลย ไม่ควร ALTER เพิ่มทีหลัง (Lock ตารางนาน)