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

วิธีตรวจสอบ Foreign Key ใน MySQL Database

ใช้ SHOW CREATE TABLE เพื่อดู Foreign Key Constraints

วิธีง่ายที่สุดคือใช้ SHOW CREATE TABLE table_name\G (เพิ่ม \G เพื่อแสดงแนวตั้ง อ่านง่าย)

ตัวอย่าง: สร้างตารางมี FK แล้วตรวจสอบ

-- Parent Table
CREATE TABLE DemoTable1 (
    Id INT NOT NULL PRIMARY KEY,
    EmployeeName VARCHAR(100)
);

-- Child Table มี Foreign Key
CREATE TABLE DemoTable2 (
    Id INT NOT NULL,
    StreetName VARCHAR(100),
    CityName VARCHAR(100),
    CountryName VARCHAR(100),
    PinCode INT,
    EmployeeId INT,
    PRIMARY KEY(Id),
    FOREIGN KEY (Id) REFERENCES DemoTable1(Id)
);

Query ตรวจสอบ

SHOW CREATE TABLE DemoTable2\G

ผลลัพธ์ (จัดรูปแบบ):

Table: DemoTable2
Create Table: CREATE TABLE `demotable2` (
  `Id` int(11) NOT NULL,
  `StreetName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CityName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `CountryName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `PinCode` int(11) DEFAULT NULL,
  `EmployeeId` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  CONSTRAINT `demotable2_ibfk_1` FOREIGN KEY (`Id`) REFERENCES `demotable1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

วิธีอื่น: Query FROM INFORMATION_SCHEMA

-- ดู FK ทั้งหมดใน Database
SELECT 
    TABLE_NAME,
    COLUMN_NAME,
    CONSTRAINT_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_database'
  AND REFERENCED_TABLE_NAME IS NOT NULL;

ผลลัพธ์ตัวอย่าง:

TABLE_NAMECOLUMN_NAMECONSTRAINT_NAMEREFERENCED_TABLE_NAMEREFERENCED_COLUMN_NAME
DemoTable2Iddemotable2_ibfk_1DemoTable1Id

คำสั่งที่เกี่ยวข้อง

  • SHOW CREATE TABLE table_name - ดู DDL เต็ม (มี FK, Index, Engine, Charset)
  • SHOW INDEX FROM table_name - ดู Index ทั้งหมด (FK สร้าง Index อัตโนมัติ)
  • SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' - รายการ Constraint ทั้งหมด
  • SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS - รายละเอียด FK (ON DELETE, ON UPDATE)

Foreign Key Actions

Best Practice

  1. ตั้งชื่อ Constraint เอง: CONSTRAINT fk_order_user FOREIGN KEY (user_id) REFERENCES users(id)
  2. ใช้ ON DELETE RESTRICT (Default) ป้องกันการลบข้อมูลโดยไม่ตั้งใจ
  3. Index FK Column อัตโนมัติใน InnoDB - ไม่ต้องสร้าง Index เอง
Actionคำอธิบาย
RESTRICT / NO ACTIONป้องกัน Delete/Update Parent ถ้ามี Child (Default)
CASCADEDelete/Update Child อัตโนมัติเมื่อ Parent ถูก Delete/Update
SET NULLตั้งค่า FK Column เป็น NULL เมื่อ Parent ถูก Delete
SET DEFAULTตั้งค่า FK Column เป็น Default Value (MySQL ไม่รองรับ)