1. Giới thiệu
PRIMARY KEY và FOREIGN KEY là hai loại MySQL Constraints quan trọng và được sử dụng phổ biến trong quá trình thiết kế cơ sở dữ liệu. Chúng đảm bảo tính toàn vẹn của dữ liệu và tạo mối quan hệ giữa các bảng.
PRIMARY KEY: Xác định một cột (hoặc tập hợp các cột) mà mỗi giá trị là duy nhất và không thể để trống. Đây là một khóa chính giúp xác định duy nhất mỗi bản ghi trong bảng.FOREIGN KEY: Được sử dụng để thiết lập mối quan hệ giữa hai bảng, đảm bảo rằng một giá trị trong bảng này phải tồn tại trong bảng khác.
2. PRIMARY KEY
a. Chức năng của PRIMARY KEY
PRIMARY KEYđảm bảo rằng mỗi bản ghi trong bảng đều có một giá trị duy nhất cho cột hoặc nhóm cột được chỉ định.- Một bảng chỉ có thể có một khóa chính, nhưng một khóa chính có thể bao gồm nhiều cột (khóa chính phức hợp).
b. Cú pháp PRIMARY KEY trong MySQL
Bạn có thể định nghĩa PRIMARY KEY khi tạo bảng bằng cách sử dụng cú pháp sau:
CREATE TABLE table_name (
column_name datatype PRIMARY KEY
);Ngoài ra, bạn cũng có thể định nghĩa PRIMARY KEY với nhiều cột:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
PRIMARY KEY (column1, column2)
);c. Ví dụ về PRIMARY KEY
Ví dụ 1: Tạo bảng employees với cột employee_id là khóa chính
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50)
);Trong ví dụ này, cột employee_id là khóa chính, nghĩa là mỗi nhân viên phải có một employee_id duy nhất và không thể để trống.
Ví dụ 2: Tạo bảng orders với khóa chính bao gồm nhiều cột
CREATE TABLE orders (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id)
);Trong ví dụ này, khóa chính là sự kết hợp của hai cột order_id và product_id, đảm bảo rằng mỗi bản ghi trong bảng là duy nhất dựa trên sự kết hợp của hai cột này.
d. Thêm khóa chính vào bảng đã tồn tại
Bạn có thể thêm PRIMARY KEY vào bảng đã tồn tại bằng câu lệnh ALTER TABLE:
ALTER TABLE employees
ADD PRIMARY KEY (employee_id);e. Xóa khóa chính
Để xóa khóa chính, bạn có thể sử dụng câu lệnh sau:
ALTER TABLE employees
DROP PRIMARY KEY;3. FOREIGN KEY
a. Chức năng của FOREIGN KEY
FOREIGN KEYđảm bảo rằng một giá trị trong bảng này tham chiếu đến một giá trị hợp lệ trong bảng khác.- Nó giúp duy trì tính toàn vẹn tham chiếu bằng cách kiểm soát mối quan hệ giữa hai bảng. Mỗi giá trị trong cột khóa ngoại phải tồn tại trong cột khóa chính của bảng tham chiếu.
b. Cú pháp FOREIGN KEY trong MySQL
Khi tạo bảng, bạn có thể thêm FOREIGN KEY như sau:
CREATE TABLE table_name (
column_name datatype,
FOREIGN KEY (column_name) REFERENCES referenced_table(referenced_column)
);c. Ví dụ về FOREIGN KEY
Ví dụ 3: Tạo bảng orders với cột customer_id là khóa ngoại tham chiếu tới bảng customers
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);Trong ví dụ này:
- Cột
customer_idtrong bảngorderslà khóa ngoại và tham chiếu tới cộtcustomer_idtrong bảngcustomers. - Điều này đảm bảo rằng mỗi đơn hàng trong bảng
ordersphải thuộc về một khách hàng có trong bảngcustomers.
d. Thêm khóa ngoại vào bảng đã tồn tại
Bạn có thể thêm FOREIGN KEY vào bảng đã tồn tại bằng câu lệnh ALTER TABLE:
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);e. Xóa khóa ngoại
Để xóa khóa ngoại, bạn sử dụng câu lệnh sau:
ALTER TABLE orders
DROP FOREIGN KEY fk_customer;4. Cách thức hoạt động của PRIMARY KEY và FOREIGN KEY trong MySQL
a. Mối quan hệ giữa PRIMARY KEY và FOREIGN KEY
PRIMARY KEYđược sử dụng để xác định duy nhất một bản ghi trong bảng.FOREIGN KEYtạo mối quan hệ giữa hai bảng bằng cách tham chiếu tới cộtPRIMARY KEYcủa bảng khác. Nó đảm bảo rằng các giá trị trong bảng con (child table) phải có bản ghi tương ứng trong bảng cha (parent table).
Ví dụ:
- Bảng
customerscócustomer_idlàPRIMARY KEY. - Bảng
orderscócustomer_idlàFOREIGN KEYtham chiếu đếncustomers(customer_id).
b. Tính toàn vẹn tham chiếu (Referential Integrity)
Tính toàn vẹn tham chiếu đảm bảo rằng các bản ghi trong bảng con không thể tồn tại nếu không có bản ghi tương ứng trong bảng cha. Điều này giúp duy trì dữ liệu chính xác và nhất quán giữa các bảng có mối quan hệ.
c. Hành vi khi xóa hoặc cập nhật dữ liệu
Khi bạn xóa hoặc cập nhật một bản ghi trong bảng cha, có thể xảy ra các hành vi sau trên bảng con (nếu có ràng buộc khóa ngoại):
CASCADE: Khi một bản ghi trong bảng cha bị xóa, tất cả các bản ghi liên quan trong bảng con cũng bị xóa.SET NULL: Khi bản ghi trong bảng cha bị xóa, các bản ghi liên quan trong bảng con sẽ được đặt giá trị khóa ngoại thànhNULL.NO ACTION: Không thực hiện hành động gì khi xóa bản ghi trong bảng cha (đây là hành vi mặc định nếu không chỉ định hành vi cụ thể).
Ví dụ 4: Sử dụng ON DELETE CASCADE
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
);Trong ví dụ này, nếu một khách hàng trong bảng customers bị xóa, tất cả các đơn hàng liên quan trong bảng orders cũng sẽ tự động bị xóa nhờ vào ràng buộc ON DELETE CASCADE.
Kết luận
PRIMARY KEY và FOREIGN KEY là những công cụ quan trọng trong SQL để đảm bảo tính toàn vẹn dữ liệu và duy trì mối quan hệ giữa các bảng.
PRIMARY KEYgiúp xác định duy nhất các bản ghi trong một bảng.FOREIGN KEYtạo mối quan hệ tham chiếu giữa hai bảng, đảm bảo rằng các giá trị trong bảng con phải tồn tại trong bảng cha.
Việc hiểu rõ cách sử dụng PRIMARY KEY và FOREIGN KEY là cực kỳ quan trọng khi thiết kế cơ sở dữ liệu phức tạp với nhiều bảng liên quan. Hãy thử áp dụng các ví dụ trên trong các bài tập và dự án thực tế để hiểu sâu hơn về cách hoạt động của chúng trên CodeTutHub!









