hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • MySQL
Khóa Ngoại (FOREIGN KEY) Trong MySQL

Khóa Ngoại (FOREIGN KEY) Trong MySQL

  • 07-07-2025
  • Toanngo92
  • 0 Comments

Mục lục

  • 1. FOREIGN KEY Là Gì?
  • 2. Ví Dụ Thực Tế
  • 3. Cú Pháp Tạo FOREIGN KEY
    • ✅ Cách 1: Tạo ngay khi tạo bảng
    • ✅ Cách 2: Tạo bằng lệnh ALTER TABLE
  • 4. Tùy Chọn ON DELETE và ON UPDATE
    • Ví dụ:
  • 5. Kiểm Tra Các Khóa Ngoại Trong Bảng
  • 6. Xóa Khóa Ngoại
  • 7. Một Số Lưu Ý Khi Dùng FOREIGN KEY
  • 8. Kết Luận

1. FOREIGN KEY Là Gì?

  • FOREIGN KEY (khóa ngoại) là một ràng buộc (constraint) dùng để tạo mối liên kết giữa hai bảng trong cơ sở dữ liệu.
  • Một cột (hoặc nhiều cột) trong bảng hiện tại sẽ tham chiếu (reference) tới khóa chính (PRIMARY KEY) hoặc UNIQUE trong bảng khác.
  • Điều này đảm bảo rằng dữ liệu trong bảng con luôn hợp lệ và đồng bộ với bảng cha.

2. Ví Dụ Thực Tế

Giả sử bạn có 2 bảng:

  • LOP (danh sách lớp): MaLop, TenLop
  • SINHVIEN: MaSV, TenSV, MaLop ← cột MaLop trong bảng SINHVIEN sẽ tham chiếu đến MaLop trong bảng LOP.

3. Cú Pháp Tạo FOREIGN KEY

✅ Cách 1: Tạo ngay khi tạo bảng

CREATE TABLE LOP (
    MaLop INT PRIMARY KEY,
    TenLop VARCHAR(100)
);

CREATE TABLE SINHVIEN (
    MaSV INT PRIMARY KEY,
    TenSV VARCHAR(100),
    MaLop INT,
    FOREIGN KEY (MaLop) REFERENCES LOP(MaLop)
);

✅ Cách 2: Tạo bằng lệnh ALTER TABLE

ALTER TABLE SINHVIEN
ADD CONSTRAINT fk_lop_sinhvien
FOREIGN KEY (MaLop) REFERENCES LOP(MaLop);

⚠️ CONSTRAINT fk_lop_sinhvien là tên khóa ngoại. Việc đặt tên giúp dễ quản lý sau này (ví dụ khi xóa khóa).


4. Tùy Chọn ON DELETE và ON UPDATE

Khi tạo khóa ngoại, bạn có thể chỉ định hành động khi dòng bị tham chiếu bị xóa hoặc cập nhật:

Tùy chọnÝ nghĩa
ON DELETE CASCADEXóa dữ liệu liên quan trong bảng con khi bảng cha bị xóa
ON DELETE SET NULLĐặt giá trị khóa ngoại trong bảng con thành NULL khi bảng cha bị xóa
ON DELETE RESTRICTKhông cho xóa nếu có bản ghi con đang tham chiếu
ON DELETE NO ACTIONGiống như RESTRICT (không hành động gì)

Ví dụ:

CREATE TABLE SINHVIEN (
    MaSV INT PRIMARY KEY,
    TenSV VARCHAR(100),
    MaLop INT,
    FOREIGN KEY (MaLop) REFERENCES LOP(MaLop)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

5. Kiểm Tra Các Khóa Ngoại Trong Bảng

Dùng câu lệnh sau để liệt kê các khóa ngoại:

SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'SINHVIEN';

6. Xóa Khóa Ngoại

Để xóa khóa ngoại, cần biết tên constraint:

ALTER TABLE SINHVIEN DROP FOREIGN KEY fk_lop_sinhvien;

7. Một Số Lưu Ý Khi Dùng FOREIGN KEY

Lưu ýGiải thích
✅ Cột được tham chiếu phải là PRIMARY KEY hoặc UNIQUE
✅ Phải có cùng kiểu dữ liệu (hoặc tương thích)
✅ Cả hai bảng phải dùng InnoDB (bộ máy hỗ trợ ràng buộc)
❌ Không dùng được với MEMORY hoặc MyISAM engine

8. Kết Luận

FOREIGN KEY giúp thiết lập mối quan hệ cha – con giữa các bảng, đảm bảo toàn vẹn dữ liệu và hỗ trợ hành vi đồng bộ khi cập nhật/xóa dữ liệu. Trong thực tế, các mối quan hệ như:

  • User → Orders
  • Category → Products
  • Class → Students

đều cần đến khóa ngoại để đảm bảo tính chính xác và logic.

Bài viết liên quan:

Các kiểu ràng buộc dữ liệu (constraint) trong MySQL
Thiết Lập Tăng Tự Động (AUTO_INCREMENT), định danh duy nhất toàn cục (UUID) Trong MySQL
Tìm Hiểu Ràng Buộc UNIQUE Trong MySQL
Tìm Hiểu Khóa Chính (Primary Key) Trong MySQL
Các câu lệnh DDL trong MySQL
Data Types (kiểu dữ liệu) trong MySQL
Storage Engines/table types (công cụ lưu trữ) trong MySQL
Khởi tạo và quản trị database trong MySQL
Phân loại các kiểu câu lệnh SQL trong MySQL
Cài đặt và sử dụng Mysql Server Mac Os

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Các kiểu ràng buộc dữ liệu (constraint) trong MySQL

Khóa Ngoại (FOREIGN KEY) Trong MySQL

Thiết Lập Tăng Tự Động (AUTO_INCREMENT), định danh duy nhất toàn cục (UUID) Trong MySQL

Cấu trúc dữ liệu Tree

Mô hình mẫu trên giấy (nguyên mẫu giấy) – Paper Prototyping

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×