Ràng buộc (Constraint) trong SQLite



Ràng buộc (Constraint) là các qui tắc bắt buộc cho các cột dữ liệu trong bảng. Chúng được sử dụng để giới hạn kiểu dữ liệu mà có thể nhập vào một bảng. Điều này đảm bảo tính chính xác và tính đáng tin cậy cho dữ liệu trong Database.

Ràng buộc (Constraint) có thể là ở cấp độ cột (column level) hoặc cấp độ bảng (table level). Ràng buộc cấp độ cột chỉ được áp dụng cho một cột, trong khi ràng buộc cấp độ bảng được áp dụng cho cả bảng.

Dưới đây là các Ràng buộc (Constraint) được sử dụng phổ biến có sẵn trong SQLite:

  • Ràng buộc NOT NULL: Bảo đảm rằng một cột không thể có giá trị NULL.

  • Ràng buộc DEFAULT: Cung cấp một giá trị mặc định cho một cột khi không có giá trị nào được xác định.

  • Ràng buộc UNIQUE: Bảo đảm rằng tất cả giá trị trong một cột là khác nhau.

  • Ràng buộc PRIMARY Key: Mỗi hàng/bản ghi được xác định là duy nhất trong một bảng dữ liệu.

  • Ràng buộc CHECK: Bảo đảm rằng rất cả giá trị trong một cột thỏa mãn các điều kiện cụ thể.

Ràng buộc NOT NULL trong SQLite

Theo mặc định, một cột có thể giữ các giá trị NULL. Nếu bạn không muốn một cột mà có một giá trị NULL, thì bạn cần định nghĩa ràng buộc NOT NULL trên cột này, để xác định rằng bây giờ NULL là không được chấp nhận bởi cột đó.

Một NULL tương tự như không có dữ liệu nào, nó biểu diễn một dữ liệu không biết.

Ví dụ

Ví dụ sau tạo một bảng mới với tên COMPANY và thêm 5 cột, 3 trong số đó là ID, NAME và AGE được xác định là không chấp nhận giá trị NULL.

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Ràng buộc DEFAULT trong SQLite

Ràng buộc DEFAULT trong SQLite cung cấp một giá trị mặc định cho một cột khi lệnh INSERT INTO không cung cấp một giá trị cụ thể.

Ví dụ

Ví dụ sau tạo bảng mới với tên COMPANY và thêm 5 cột. Ở đây, cột SALARY được thiết lập là 5000.00 theo mặc định, vì thế, trong trường hợp lệnh INSERT INTO không cung cấp một giá trị cho cột này, thì theo mặc định, cột này sẽ được thiết lập là 5000.00.

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

Ràng buộc UNIQUE trong SQLite

Ràng buộc UNIQUE trong SQLite ngăn cản việc hai bản ghi có các giá trị đồng nhất trong một cột cụ thể. Ví dụ, trong bảng COMPANY, bạn có thể muốn ngăn cản việc hai hoặc nhiều người có cùng tuổi.

Ví dụ

Ví dụ sau tạo bảng mới với tên COMPANY và thêm 5 cột. Ở đây, cột AGE được thiết lập là UNIQUE, để bạn không muốn hai bản ghi có cùng tuổi.

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

Ràng buộc PRIMARY KEY trong SQLite

Một PRIMARY KEY xác định một cách duy nhất mỗi hàng/bản ghi trong một bảng dữ liệu. Có thể có nhiều hơn một cột là UNIQUE, nhưng chỉ có một Primary Key trong một bảng. Các Primary Key là rất quan trọng trong khi thiết kế các bảng trong cơ sở dữ liệu. Các Primary Key là các Id duy nhất.

Chúng ta sử dụng chúng để tham chiếu các hàng trong bảng. Các Primary Key trở thành các Foreign Key trong các bảng bên ngoài, khi tạo ra các mối quan hệ giữa các bảng. Do một sự nhầm lẫn nào đó, trong SQLite, các Primary Key có thể là NULL. Trong các ngôn ngữ khác, không xảy ra điều này.

Một Primary Key là một trường trong một bảng mà xác định duy nhất các hàng/bản ghi trong một bảng. Primary Key phải chứa các giá trị duy nhất. Một cột với ràng buộc là Primary Key không thể có các giá trị NULL.

Một bảng có thể chỉ có một Primary Key mà có thể gồm một hoặc nhiều trường. Khi nhiều trường được sử dụng như là một Primary Key, chúng được gọi là Composite Key.

Nếu một bảng có một Primary Key được định nghĩa trên bất cứ trường nào, thì bạn không thể có hai bản ghi có cùng giá trị trong trường đó

Ví dụ

Trong ví dụ này sẽ tạo bảng COMPANY với ID như là Primary Key.

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Ràng buộc CHECK trong SQLite

Ràng buộc CHECK cho phép một điều kiện để kiểm tra giá trị đang được nhập vào một bản ghi. Nếu điều kiện được ước lượng là false, thì bản ghi vi phạm ràng buộc này và không được nhập vào trong bảng.

Ví dụ

Ví dụ sau tạo một bảng mới với tên COMPANY và thêm 5 cột. Ở đây, chúng ta thêm một ràng buộc CHECK cho cột SALARY, để mà bạn không thể có bất kỳ giá trị 0 nào trong cột này.

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

Xóa các ràng buộc trong SQLite

SQLite chỉ hỗ trợ một số tính năng của lệnh ALTER TABLE. Lệnh ALTER TABLE trong SQLite cho phép người dùng thay tên một bảng hoặc thêm một cột mới vào bảng đang tồn tại. Nó không thể thay tên một cột, xóa một cột, hoặc thêm hoặc xóa xác ràng buộc từ một bảng.

Các bài học SQLite phổ biến khác tại VietJack: