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 NULLUNIQUE, đượ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 NULLUNIQUE, 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:

shell
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_namelast_name không thể để trống

shell
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_namelast_name được đặt ràng buộc NOT 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

shell
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:

shell
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:

shell
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:

shell
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

shell
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

shell
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:

shell
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:

shell
ALTER TABLE employees
DROP INDEX unique_email;

4. So sánh giữa NOT NULLUNIQUE

  • 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ới NOT NULL).
  • Khi cần đảm bảo cả giá trị không được để trống 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 NULLUNIQUE

shell
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 NULLUNIQUE, 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 NULLUNIQUE 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 NULLUNIQUE trong MySQL!