SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Ràng buộc DUY NHẤT trong SQLite

Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite UNIQUE ràng buộc để đảm bảo tất cả các giá trị trong một cột hoặc một nhóm cột là duy nhất.

Giới thiệu về SQLite UNIQUE ràng buộc

Một UNIQUE ràng buộc đảm bảo tất cả các giá trị trong một cột hoặc một nhóm cột khác biệt với nhau hoặc duy nhất.

Để xác định một UNIQUE ràng buộc, bạn sử dụng UNIQUE từ khóa được theo sau bởi một hoặc nhiều cột.

Bạn có thể xác định một UNIQUE ràng buộc ở cấp cột hoặc cấp bảng. Chỉ ở cấp bảng, bạn có thể xác định một UNIQUE ràng buộc trên nhiều cột.

Phần sau trình bày cách xác định một UNIQUE ràng buộc cho một cột ở cấp độ cột:

CREATE TABLE table_name(
    ...,
    column_name type UNIQUE,
    ...
);
Code language: SQL (Structured Query Language) (sql)

Hoặc ở cấp bảng:

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)

Phần sau minh họa cách xác định một UNIQUE ràng buộc cho nhiều cột:

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)

Một lần UNIQUE ràng buộc được xác định, nếu bạn cố gắng chèn hoặc cập nhật một giá trị đã tồn tại trong cột, SQLite sẽ gây ra lỗi và hủy bỏ hoạt động.

SQLite UNIQUE các ví dụ về ràng buộc

Hãy lấy một số ví dụ về việc sử dụng UNIQUE ràng buộc.

Xác định một UNIQUE ràng buộc cho một ví dụ cột

Câu lệnh sau tạo một bảng mới có tên contacts với UNIQUE ràng buộc được xác định cho email cột:

CREATE TABLE contacts(
    contact_id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    email TEXT NOT NULL UNIQUE
);
Code language: SQL (Structured Query Language) (sql)

Ví dụ sau đây chèn một hàng mới vào contacts bảng:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Nếu bạn cố gắng chèn một địa chỉ liên hệ mới với cùng một email, bạn sẽ nhận được thông báo lỗi:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Đây là thông báo lỗi:

Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)

Xác định một UNIQUE ví dụ ràng buộc cho nhiều cột

Câu lệnh sau tạo ra các shapes bảng có UNIQUE ràng buộc được xác định cho background_colorforeground_color cột:

CREATE TABLE shapes(
    shape_id INTEGER PRIMARY KEY,
    background_color TEXT,
    foreground_color TEXT,
    UNIQUE(background_color,foreground_color)
);
Code language: SQL (Structured Query Language) (sql)

Câu lệnh sau sẽ chèn một hàng mới vào các shapes bảng:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

Câu lệnh sau hoạt động vì không có vi phạm trùng lặp trong cả background_colorforeground_color cột:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)

Tuy nhiên, câu lệnh sau đây gây ra lỗi do các bản sao trong cả background_colorforeground_color cột:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

Đây là lỗi:

Error while executing SQL query on database 'chinook': `UNIQUE` constraint failed: shapes.background_color, shapes.foreground_color
Code language: SQL (Structured Query Language) (sql)

SQLite UNIQUE ràng buộc và NULL

SQLite xử lý tất cả các giá trị NULL là khác nhau, do đó, một cột có UNIQUE ràng buộc có thể có nhiều giá trị NULL.

Câu lệnh sau tạo một bảng mới có tên là lists email của ai cột có UNIQUE ràng buộc:

CREATE TABLE lists(
    list_id INTEGER PRIMARY KEY,
    email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)

Câu lệnh sau đây chèn nhiều giá trị NULL vào email cột của lists bảng:

INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)

Hãy truy vấn dữ liệu từ lists bảng:

SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)

Đây là kết quả:

Như bạn có thể thấy, mặc dù cột email có UNIQUE ràng buộc, nó có thể chấp nhận nhiều giá trị NULL.

Trong hướng dẫn này, bạn đã học cách sử dụng SQLite UNIQUE ràng buộc để đảm bảo tất cả các giá trị trong một cột hoặc một nhóm cột là duy nhất.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa chính của SQLite AutoIncrement không hoạt động

  2. Cách nối chuỗi trong SQLite

  3. Tôi nên chọn gì - JSON hay SQLite?

  4. Liên kết các bảng bằng cơ sở dữ liệu Phòng trong Android Studio

  5. NullPointerException trên getReadableDatabase ()