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_color
và foreground_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_color
và foreground_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_color
và foreground_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.