MySQL - Khóa Phức Hợp

Xin chào, những người yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của Khóa Phức Hợp trong MySQL. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - Tôi sẽ hướng dẫn bạn qua khái niệm này từng bước một, cũng như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy lấy một cốc đồ uống yêu thích của bạn, và chúng ta cùng nhảy vào!

MySQL - Composite Key

Khóa Phức Hợp Là Gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu thế nào là một khóa phức hợp. Hãy tưởng tượng bạn đang tổ chức một thư viện khổng lồ. Bạn có thể nghĩ rằng tiêu đề của một cuốn sách đủ để xác định nó một cách duy nhất. Nhưng sẽ thế nào nếu có hai cuốn sách có cùng tiêu đề? Đó là lúc khóa phức hợp phát huy tác dụng!

Khóa phức hợp là sự kết hợp của hai hoặc nhiều cột để cùng nhau xác định duy nhất một hàng trong bảng. Nó giống như sử dụng cả tiêu đề sách và tên tác giả để đảm bảo bạn đang nói về chính xác cuốn sách bạn muốn.

Tạo Khóa Phức Hợp MySQL

Bây giờ chúng ta đã hiểu khóa phức hợp là gì, hãy học cách tạo một khóa phức hợp trong MySQL. Chúng ta sẽ sử dụng một ví dụ đơn giản là bảng library để minh họa khái niệm này.

Bước 1: Tạo Bảng với Khóa Phức Hợp

CREATE TABLE library (
book_title VARCHAR(100),
author_name VARCHAR(50),
publish_year INT,
ISBN VARCHAR(13),
PRIMARY KEY (book_title, author_name)
);

Trong ví dụ này, chúng ta đang tạo một bảng gọi là library. Khóa phức hợp được hình thành bằng cách kết hợp book_titleauthor_name. Điều này có nghĩa là trong khi chúng ta có thể có nhiều sách với cùng tiêu đề hoặc nhiều sách của cùng một tác giả, nhưng sự kết hợp của tiêu đề và tác giả phải là duy nhất.

Bước 2: Chèn Dữ Liệu

Hãy thêm một số sách vào thư viện của chúng ta:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '9780743273565'),
('To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789'),
('1984', 'George Orwell', 1949, '9780451524935'),
('Pride and Prejudice', 'Jane Austen', 1813, '9780141439518');

Bây giờ, nếu chúng ta cố gắng chèn một mục đã tồn tại:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 2000, '1234567890123');

MySQL sẽ掷 ra một lỗi vì chúng ta đang vi phạm ràng buộc khóa phức hợp. Sự kết hợp của 'The Great Gatsby' và 'F. Scott Fitzgerald' đã tồn tại trong bảng của chúng ta.

Xóa Khóa Phức Hợp MySQL

Đôi khi, bạn có thể cần xóa bỏ một khóa phức hợp. Đừng lo lắng; nó không đáng sợ như bạn nghĩ! Nó giống như quyết định tổ chức thư viện của bạn theo một cách khác.

Dưới đây là cách bạn có thể xóa bỏ một khóa phức hợp:

ALTER TABLE library
DROP PRIMARY KEY;

Lệnh này sẽ xóa bỏ ràng buộc khóa chính khỏi bảng library. Nhưng hãy cẩn thận! Điều này có nghĩa là bạn sẽ không còn có một идентификатор duy nhất cho các hàng của mình, điều này có thể dẫn đến các mục trùng lặp.

Khóa Phức Hợp Sử Dụng Chương Trình Khách

Bây giờ, hãy xem cách chúng ta có thể làm việc với khóa phức hợp sử dụng một chương trình khách MySQL. Tôi sẽ sử dụng chương trình khách dòng lệnh MySQL cho ví dụ này, nhưng các khái niệm cũng áp dụng cho các chương trình khách khác.

  1. Đầu tiên, kết nối đến máy chủ MySQL của bạn:
mysql -u your_username -p
  1. Chọn cơ sở dữ liệu của bạn:
USE your_database_name;
  1. Bây giờ, hãy tạo một bảng mới với khóa phức hợp:
CREATE TABLE students (
student_id INT,
course_id INT,
enrollment_date DATE,
grade FLOAT,
PRIMARY KEY (student_id, course_id)
);

Trong ví dụ này, chúng ta đang tạo một bảng students nơi mỗi hàng đại diện cho một sinh viên đã đăng ký một khóa học. Khóa phức hợp được hình thành bởi student_idcourse_id, đảm bảo rằng một sinh viên không thể đăng ký cùng một khóa học hai lần.

  1. Hãy chèn một số dữ liệu:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES
(1, 101, '2023-09-01', 85.5),
(1, 102, '2023-09-01', 92.0),
(2, 101, '2023-09-01', 78.5),
(2, 103, '2023-09-02', 88.0);
  1. Bây giờ, nếu chúng ta cố gắng chèn một mục đã tồn tại:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES (1, 101, '2023-09-15', 90.0);

Chương trình khách sẽ hiển thị một thông báo lỗi vì chúng ta đang vi phạm ràng buộc khóa phức hợp.

Kết Luận

Chúc mừng! Bạn đã vừa bước những bước đầu tiên vào thế giới của Khóa Phức Hợp trong MySQL. Nhớ rằng, khóa phức hợp là như một đôi bạn đồng hành trong thế giới cơ sở dữ liệu - chúng hoạt động cùng nhau để giữ cho dữ liệu của bạn duy nhất và tổ chức tốt.

Khi bạn tiếp tục hành trình của mình trong quản lý cơ sở dữ liệu, bạn sẽ thấy khóa phức hợp vô cùng hữu ích trong việc duy trì tính toàn vẹn dữ liệu và thiết lập mối quan hệ giữa các bảng. Chúng đặc biệt hữu ích khi một cột đơn không đủ để xác định duy nhất một hàng.

Tiếp tục luyện tập, và sớm bạn sẽ tạo và quản lý khóa phức hợp như một chuyên gia! Và nhớ rằng, trong thế giới cơ sở dữ liệu, cũng như trong cuộc sống, đôi khi hai (hoặc nhiều hơn) tốt hơn một!

Phương Thức Mô Tả
CREATE TABLE ... PRIMARY KEY (column1, column2) Tạo một bảng với khóa phức hợp
ALTER TABLE ... ADD PRIMARY KEY (column1, column2) Thêm một khóa phức hợp vào bảng đã.exists
ALTER TABLE ... DROP PRIMARY KEY Xóa bỏ khóa chính (phức hợp hoặc không) khỏi bảng
INSERT INTO ... VALUES ... Chèn dữ liệu, tuân thủ ràng buộc khóa phức hợp
SELECT ... WHERE column1 = value1 AND column2 = value2 Truy vấn dữ liệu sử dụng khóa phức hợp

Chúc bạn lập trình vui vẻ, và may mắn để cơ sở dữ liệu của bạn luôn được tổ chức tốt và hiệu quả!

Credits: Image by storyset