Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

พื้นฐาน Foreign Key ใน MySQL

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 ตารางนาน)