Ràng buộc trong SQL

Các rà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 rà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, ràng buộc này giúp tạo chỉ mục (index) để tìm kiếm trong bảng nhanh hơn
  • CHECK : rà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 : rà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 : rà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 ràng buộc Contraint, trên CSDL SQLite

CREATE TABLE khachhangmoi (
    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)
)
Chạy thử

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 rà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 rà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 rà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 ràng buộc DEFAULT 'HANOI'

Ở đây có một file CSDL mẫu dạng SQLite, bạn có thể tải về nghiên cứu, thực hành: CSDL SQLite mẫu. Hoặc sử dụng trực tiếp công cụ Online: Chạy SQL

Cú pháp sử dụng rà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)
)

Đăng ký nhận bài viết mới