Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách xác định Foreign Key trong MySQL Database

Phương pháp

Sử dụng SHOW CREATE TABLE ten_bang để xem định nghĩa bảng bao gồm foreign key constraints.

Ví dụ

Tạo bảng cha:

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

Tạo bảng con có FK tham chiếu:

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)
);

Xem định nghĩa bảng con:

SHOW CREATE TABLE DemoTable2\G

Kết quả (định dạng dọc \G):

*************************** 1. row ***************************
       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

Phân tích kết quả

  • CONSTRAINT `demotable2_ibfk_1`: Tên constraint (auto-generated nếu không chỉ định).
  • FOREIGN KEY (`Id`): Cột trong bảng hiện tại.
  • REFERENCES `demotable1` (`id`): Bảng và cột tham chiếu.
  • ENGINE=InnoDB: FK chỉ hoạt động trên InnoDB.

Các cách khác xem FK

-- 1. INFORMATION_SCHEMA (programmatic)
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'DemoTable2' AND REFERENCED_TABLE_NAME IS NOT NULL;

-- 2. SHOW TABLE STATUS (chỉ thấy comment)
SHOW TABLE STATUS LIKE 'DemoTable2';

-- 3. MySQL Workbench / phpMyAdmin: GUI trực quan

Best Practice

  • Đặt tên constraint tường minh: CONSTRAINT fk_demo2_demo1 FOREIGN KEY (Id) REFERENCES DemoTable1(Id).
  • Luôn dùng InnoDB cho bảng có FK.
  • Index trên cột FK (MySQL tự tạo nếu chưa có).