ใช้ 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_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
|---|---|---|---|---|
| DemoTable2 | Id | demotable2_ibfk_1 | DemoTable1 | Id |
คำสั่งที่เกี่ยวข้อง
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
| Action | คำอธิบาย |
|---|---|
| RESTRICT / NO ACTION | ป้องกัน Delete/Update Parent ถ้ามี Child (Default) |
| CASCADE | Delete/Update Child อัตโนมัติเมื่อ Parent ถูก Delete/Update |
| SET NULL | ตั้งค่า FK Column เป็น NULL เมื่อ Parent ถูก Delete |
| SET DEFAULT | ตั้งค่า FK Column เป็น Default Value (MySQL ไม่รองรับ) |