1. Giới thiệu
SQL Constraints là các ràng buộc được áp dụng trên các cột của bảng trong cơ sở dữ liệu để đảm bảo tính toàn vẹn và chính xác của dữ liệu. Các ràng buộc giúp kiểm soát các quy tắc dữ liệu, đảm bảo rằng các giá trị trong bảng phù hợp với các tiêu chí đã xác định. Khi tạo bảng, bạn có thể áp dụng các ràng buộc này để quản lý cách dữ liệu được nhập và duy trì tính nhất quán của cơ sở dữ liệu.
2. Các loại SQL Constraints chính
Dưới đây là các loại SQL Constraints phổ biến nhất:
- NOT NULL: Đảm bảo rằng một cột không thể chứa giá trị
NULL. - UNIQUE: Đảm bảo rằng tất cả các giá trị trong một cột là duy nhất.
- PRIMARY KEY: Xác định một cột (hoặc một tập hợp các cột) là duy nhất và không thể có giá trị
NULL. - FOREIGN KEY: Thiết lập mối quan hệ giữa hai bảng, đảm bảo tính toàn vẹn tham chiếu.
- CHECK: Đảm bảo rằng các giá trị trong một cột thỏa mãn một điều kiện cụ thể.
- DEFAULT: Gán một giá trị mặc định cho cột nếu không có giá trị nào được cung cấp.
- INDEX: Tăng tốc độ truy vấn dữ liệu bằng cách tạo chỉ mục trên một hoặc nhiều cột.
3. Giải thích chi tiết và ví dụ về từng loại Constraints
a. NOT NULL
Ràng buộc NOT NULL đảm bảo rằng một cột không thể chứa giá trị NULL. Điều này có nghĩa là mỗi bản ghi trong bảng phải cung cấp giá trị cho cột này.
Ví dụ:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
department VARCHAR(50)
);Trong ví dụ trên, các cột first_name và last_name có ràng buộc NOT NULL, nghĩa là khi thêm một bản ghi mới vào bảng, bạn phải cung cấp giá trị cho hai cột này.
b. UNIQUE
Ràng buộc UNIQUE đảm bảo rằng tất cả các giá trị trong cột là duy nhất, tức là không có hai hàng nào có cùng một giá trị trong cột được áp dụng ràng buộc UNIQUE.
Ví dụ:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);Trong ví dụ trên, cột email có ràng buộc UNIQUE, đảm bảo rằng không có hai nhân viên nào có cùng địa chỉ email.
c. PRIMARY KEY
Ràng buộc PRIMARY KEY xác định một cột hoặc một tập hợp các cột là duy nhất và không chứa giá trị NULL. Mỗi bảng chỉ có thể có một khóa chính, và cột hoặc tập hợp cột được chọn phải đảm bảo rằng mỗi hàng có một giá trị duy nhất.
Ví dụ:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);Ở đây, employee_id là khóa chính (PRIMARY KEY), đảm bảo rằng mỗi nhân viên có một employee_id duy nhất và không được bỏ trống.
d. FOREIGN KEY
Ràng buộc FOREIGN KEY đảm bảo tính toàn vẹn tham chiếu bằng cách ràng buộc một cột (hoặc một tập hợp các cột) trong bảng này phải tham chiếu đến một cột trong bảng khác. Điều này giúp bảo vệ dữ liệu liên quan giữa các bảng.
Ví dụ:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);Trong ví dụ này, cột customer_id trong bảng orders tham chiếu đến cột customer_id trong bảng customers, đảm bảo rằng mọi đơn hàng đều liên quan đến một khách hàng hợp lệ.
e. CHECK
Ràng buộc CHECK đảm bảo rằng các giá trị trong một cột phải thỏa mãn một điều kiện cụ thể. MySQL từ phiên bản 8.0 trở lên đã hỗ trợ CHECK.
Ví dụ:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
salary DECIMAL(10, 2),
CHECK (salary > 0)
);Ràng buộc CHECK trong ví dụ này đảm bảo rằng cột salary chỉ chứa các giá trị lớn hơn 0.
f. DEFAULT
Ràng buộc DEFAULT gán một giá trị mặc định cho một cột nếu không có giá trị nào được cung cấp trong quá trình thêm bản ghi mới.
Ví dụ:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
hire_date DATE DEFAULT CURRENT_DATE
);Trong ví dụ này, nếu không cung cấp giá trị cho cột hire_date, nó sẽ tự động nhận giá trị ngày hiện tại.
g. INDEX
Ràng buộc INDEX không thực sự là một ràng buộc dữ liệu, nhưng nó giúp tăng tốc độ truy vấn dữ liệu. Khi bạn tạo chỉ mục, MySQL có thể truy cập dữ liệu nhanh hơn, đặc biệt khi thực hiện các truy vấn phức tạp.
Ví dụ:
CREATE INDEX idx_firstname
ON employees (first_name);Câu lệnh này tạo một chỉ mục trên cột first_name của bảng employees, giúp tăng tốc các truy vấn tìm kiếm theo tên.
4. Thêm hoặc xóa Constraints sau khi tạo bảng
a. Thêm ràng buộc sau khi bảng đã được tạo
Bạn có thể sử dụng câu lệnh ALTER TABLE để thêm ràng buộc sau khi bảng đã được tạo.
Ví dụ: Thêm khóa ngoại vào bảng orders
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);b. Xóa ràng buộc
Sử dụng câu lệnh ALTER TABLE để xóa ràng buộc.
Ví dụ: Xóa khóa ngoại fk_customer
ALTER TABLE orders
DROP FOREIGN KEY fk_customer;Ví dụ: Xóa ràng buộc UNIQUE
ALTER TABLE employees
DROP INDEX email;Kết luận
SQL Constraints giúp đảm bảo tính toàn vẹn và chính xác của dữ liệu trong cơ sở dữ liệu. Bằng cách sử dụng các ràng buộc như NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, và DEFAULT, bạn có thể kiểm soát cách dữ liệu được nhập vào bảng và bảo vệ dữ liệu khỏi các thao tác sai lệch. Ngoài ra, chỉ mục (INDEX) giúp tăng tốc độ truy vấn và cải thiện hiệu suất của cơ sở dữ liệu.
Việc nắm vững các ràng buộc sẽ giúp bạn xây dựng các bảng dữ liệu mạnh mẽ, đáng tin cậy và dễ quản lý. Hãy thử áp dụng các ràng buộc này trong các bài tập và dự án thực tế để hiểu rõ hơn về cách chúng hoạt động trong MySQL!








