1. Giới thiệu
SQL Constraints (Ràng buộc) là các quy tắc được áp dụng trên cột của bảng nhằm đảm bảo tính toàn vẹn và chính xác của dữ liệu. Hai trong số những ràng buộc phổ biến nhất là NOT NULL và UNIQUE, được sử dụng để kiểm soát giá trị dữ liệu nhập vào các cột cụ thể trong bảng.
NOT NULLđảm bảo rằng cột không thể chứa giá trịNULL.UNIQUEđảm bảo rằng tất cả các giá trị trong cột đều duy nhất, không có sự trùng lặp.
Bài viết này sẽ giải thích chi tiết các chức năng của ràng buộc NOT NULL và UNIQUE, cách sử dụng chúng trong MySQL, các ví dụ minh họa cụ thể và cách áp dụng chúng trong các dự án thực tế.
2. SQL NOT NULL Constraint
a. Chức năng của NOT NULL
Ràng buộc NOT NULL được sử dụng để đảm bảo rằng một cột không thể có giá trị NULL. Điều này có nghĩa là khi thêm hoặc cập nhật một bản ghi, bạn phải cung cấp giá trị cho cột được áp dụng ràng buộc NOT NULL, nếu không, hệ quản trị cơ sở dữ liệu sẽ báo lỗi.
b. Cách sử dụng NOT NULL
Ràng buộc NOT NULL thường được sử dụng trong các cột mà giá trị của chúng là bắt buộc. Ví dụ: trong bảng employees, các cột như tên, ngày sinh thường không thể để trống, và việc áp dụng NOT NULL sẽ đảm bảo điều đó.
c. Cú pháp NOT NULL trong MySQL
Khi tạo bảng, bạn có thể áp dụng ràng buộc NOT NULL như sau:
CREATE TABLE table_name (
column_name datatype NOT NULL
);d. Ví dụ về NOT NULL
Ví dụ 1: Tạo bảng employees với các cột first_name và last_name không thể để trống
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
department VARCHAR(50),
hire_date DATE
);Trong ví dụ trên:
- Các cột
first_namevàlast_nameđược đặt ràng buộcNOT NULL, có nghĩa là khi thêm một nhân viên mới, bạn bắt buộc phải cung cấp giá trị cho hai cột này.
Ví dụ 2: Cố gắng thêm bản ghi mà không cung cấp giá trị cho cột first_name
INSERT INTO employees (employee_id, first_name, last_name, department, hire_date)
VALUES (1, NULL, 'Smith', 'Sales', '2023-09-01');Trong ví dụ này, MySQL sẽ báo lỗi vì cột first_name có ràng buộc NOT NULL, nhưng giá trị được cung cấp là NULL.
e. Thêm NOT NULL vào cột đã tồn tại
Nếu bạn muốn thêm ràng buộc NOT NULL vào một cột đã tồn tại trong bảng, bạn có thể sử dụng câu lệnh ALTER TABLE như sau:
ALTER TABLE employees
MODIFY first_name VARCHAR(50) NOT NULL;f. Xóa ràng buộc NOT NULL
Để xóa ràng buộc NOT NULL khỏi một cột, bạn cũng sử dụng câu lệnh ALTER TABLE:
ALTER TABLE employees
MODIFY first_name VARCHAR(50) NULL;3. SQL UNIQUE Constraint
a. Chức năng của UNIQUE
Ràng buộc UNIQUE đảm bảo rằng tất cả các giá trị trong cột mà nó được áp dụng đều là duy nhất, tức là không có giá trị nào bị trùng lặp. Điều này rất hữu ích khi bạn cần đảm bảo rằng không có hai bản ghi nào trong bảng có cùng giá trị cho một cột cụ thể, ví dụ như địa chỉ email hoặc số điện thoại.
b. Cách sử dụng UNIQUE
Ràng buộc UNIQUE được sử dụng trong các trường hợp mà giá trị cần duy trì tính duy nhất, chẳng hạn như số CMND, số tài khoản, hoặc mã nhân viên.
c. Cú pháp UNIQUE trong MySQL
Khi tạo bảng, bạn có thể áp dụng ràng buộc UNIQUE như sau:
CREATE TABLE table_name (
column_name datatype UNIQUE
);d. Ví dụ về UNIQUE
Ví dụ 3: Tạo bảng employees với cột email là duy nhất
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50)
);Trong ví dụ này, cột email có ràng buộc UNIQUE, nghĩa là không thể có hai nhân viên nào có cùng địa chỉ email.
Ví dụ 4: Cố gắng thêm bản ghi có giá trị trùng lặp cho cột email
INSERT INTO employees (employee_id, email, first_name, last_name)
VALUES (1, 'john.doe@example.com', 'John', 'Doe');
INSERT INTO employees (employee_id, email, first_name, last_name)
VALUES (2, 'john.doe@example.com', 'Jane', 'Smith');Trong ví dụ này, câu lệnh thứ hai sẽ bị lỗi vì giá trị email'john.doe@example.com' đã tồn tại trong bảng.
e. Thêm ràng buộc UNIQUE vào cột đã tồn tại
Nếu bạn muốn thêm ràng buộc UNIQUE vào một cột đã tồn tại trong bảng, bạn có thể sử dụng câu lệnh ALTER TABLE:
ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);f. Xóa ràng buộc UNIQUE
Để xóa ràng buộc UNIQUE, bạn sử dụng câu lệnh ALTER TABLE và chỉ định tên của ràng buộc cần xóa:
ALTER TABLE employees
DROP INDEX unique_email;4. So sánh giữa NOT NULL và UNIQUE
NOT NULL: Đảm bảo rằng một cột không được để trống, nhưng không bắt buộc giá trị phải là duy nhất.UNIQUE: Đảm bảo rằng giá trị trong cột phải là duy nhất, nhưng không bắt buộc cột phải có giá trị (nếu không kết hợp vớiNOT NULL).- Khi cần đảm bảo cả giá trị không được để trống và duy nhất, bạn có thể kết hợp cả hai ràng buộc trên cùng một cột.
Ví dụ 5: Kết hợp cả NOT NULL và UNIQUE
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) UNIQUE
);Trong ví dụ này, cột username không chỉ không được phép có giá trị NULL, mà còn phải là duy nhất. Trong khi đó, cột email phải là duy nhất nhưng có thể để trống (không bị ràng buộc NOT NULL).
Kết luận
SQL Constraints đóng vai trò quan trọng trong việc đả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. Hai ràng buộc phổ biến nhất là NOT NULL và UNIQUE, giúp kiểm soát dữ liệu nhập vào các cột cụ thể.
NOT NULL: Đảm bảo rằng một cột không thể có giá trịNULL.UNIQUE: Đảm bảo rằng tất cả các giá trị trong cột là duy nhất.
Việc nắm vững cách sử dụng NOT NULL và UNIQUE giúp bạn thiết kế cơ sở dữ liệu hiệu quả hơn, đảm bảo rằng dữ liệu được lưu trữ theo đúng quy tắc và dễ dàng bảo trì.
Hãy thử áp dụng các ví dụ này trong các bài tập thực hành và dự án trên CodeTutHub để hiểu rõ hơn về cách sử dụng NOT NULL và UNIQUE trong MySQL!








