Dàng buộc trong SQL

Các dàng buộc trong SQL gọi là constraint, nó chỉ ra quy tắc mà dũ liệu của cột phải tuân theo.

Khi tạo bảng SQL, bạn có thể sử dụng các dàng buộc như:

  • NOT NULL : đảm bảo dữ liệu cột luôn khác NULL
  • UNIQUE : không cho pháp dữ liệu cột này giống nhau ở các hàng khác nhau.
  • PRIMARY KEY : dữ liệu trong nó là sử kết hợp giữa NOT NULL và UNIQUE, dàng buộc này giúp tạo chỉ mục (index) để tìm kiếm trong bảng nhanh hơn
  • CHECK : dàng buộc này đảm bảo dữ liệu đã được kiểm theo một điều kiện bạn đặt ra khi chèn dữ liệu.
  • DEFAULT : dàng buộc thiết lập giá trị mặc định cho cột, nếu chèn hàng mà không truyền giá trị cho cột này nó tự nhận giá trị mặc định
  • INDEX : dàng buộc tạo chỉ mục cho bảng, mục đích để truy vấn dữ liệu nhanh hơn.

Ví dụ sử dụng các dàng buộc Contraint, trên CSDL SQLite

CREATE TABLE khachhang (
    ID        INTEGER       PRIMARY KEY AUTOINCREMENT,
    HoTen     VARCHAR (255) NOT NULL,
    Tuoi      INT,
    CMD       VARCHAR (12)  NOT NULL,
    Tinhthanh VARCHAR (255) DEFAULT 'HANOI',
    CHECK (Tuoi >= 18),
    UNIQUE(CMD)
)

Với câu lệnh tạo bảng trên, ta có thông tin về các cột như sau

  • ID kiểu dữ liệu số nguyên (INTERGER), là khóa chính (do dàng buộc PRIMARY KEY) giá trị tự động tăng khi chèn cột (thêm 1) do dùng AUTOINCREMENT.
  • HoTen kiểu varchar, và không chấp nhận chứa NULL do dàng buộc NOT NULL
  • Tuoi kiểu số nguyên, mỗi khi cập nhật, chèn cột sẽ kiểm tra đảm bảo giá trị >= 18 do dàng buộc CHECK (Tuoi >=18)
  • CMD số chứng minh thư, kiểu varchar(12), nó không chấp nhận NULL (do dang buộc NOT NULL), khi chèn dữ liệu nếu không truyền giá trị cho cột này nó tự nhận giá trị mặc định là 'HANOI' do dàng buộc DEFAULT 'HANOI'

Bạn có thể thực hành các câu lệnh SQL ví dụ trên CSDL mẫu SQLite có sẵn tại SQLite và thực hành lệnh SQL

Cú pháp sử dụng dàng buộc như trên có sự khác nhau một chút trên các hệ CSDL khác nhau, ví dụ câu lệnh trên nếu áp dụng cho MySQL thì như sau

MySQL

AUTO_INCREMENT được sử dụng thay cho AUTOINCREMENT

CREATE TABLE khachhang (
    ID INT PRIMARY KEY AUTO_INCREMENT,
    HoTen VARCHAR(255) NOT NULL,
    Tuoi INT,
    CMD VARCHAR(12) NOT NULL,
    Tinhthanh VARCHAR(255) DEFAULT 'HANOI',
    CHECK (Tuoi >= 18),
    UNIQUE(CMD)
)