Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng REPLACE
của SQLite để chèn hoặc thay thế hàng hiện có trong bảng.
Giới thiệu về SQLite REPLACE
tuyên bố
Ý tưởng về REPLACE
là khi một UNIQUE
hoặc PRIMARY KEY
vi phạm ràng buộc xảy ra, nó thực hiện như sau:
- Đầu tiên, hãy xóa hàng hiện có gây ra vi phạm ràng buộc.
- Thứ hai, chèn một hàng mới.
Trong bước thứ hai, nếu có bất kỳ vi phạm ràng buộc nào, ví dụ:NOT NULL
xảy ra ràng buộc, REPLACE
tuyên bố sẽ hủy bỏ hành động và khôi phục giao dịch.
Phần sau minh họa cú pháp của REPLACE
tuyên bố.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Hoặc ở dạng ngắn gọn:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Hãy xem một số ví dụ về việc sử dụng REPLACE
của SQLite để hiểu cách nó hoạt động.
SQLite REPLACE
các ví dụ về tuyên bố
Đầu tiên, tạo một bảng mới có tên positions
với cấu trúc sau.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ hai, chèn một số hàng vào các vị trí positions
bảng.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ ba, xác minh chèn bằng cách sử dụng SELECT
sau tuyên bố.
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Câu lệnh sau tạo một chỉ mục duy nhất trên title
cột của positions
để đảm bảo rằng nó không có bất kỳ tiêu đề vị trí trùng lặp nào:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Giả sử, bạn muốn thêm một vị trí vào các vị trí positions
nếu nó không tồn tại, trong trường hợp vị trí tồn tại, hãy cập nhật cái hiện tại.
REPLACE
sau câu lệnh chèn một hàng mới vào positions
bảng vì tiêu đề vị trí Full Stack Developer
không ở các vị trí positions
bảng.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Bạn có thể xác minh REPLACE
hoạt động bằng cách sử dụng SELECT
tuyên bố.
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Xem tuyên bố sau.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Đầu tiên, SQLite kiểm tra UNIQUE
ràng buộc.
Thứ hai, vì câu lệnh này đã vi phạm UNIQUE
bằng cách cố gắng thêm DBA
tiêu đề đã tồn tại, SQLite đã xóa hàng hiện có.
Thứ ba, SQLite đã chèn một hàng mới với dữ liệu được cung cấp bởi REPLACE
tuyên bố.
Lưu ý rằng REPLACE
câu lệnh có nghĩa là INSERT
hoặc REPLACE
, không phải INSERT
hoặc UPDATE
.
Xem tuyên bố sau.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Điều mà câu lệnh cố gắng làm là cập nhật min_salary
cho vị trí có id 2, là nhà phát triển.
Đầu tiên, vị trí có id 2 đã tồn tại, REPLACE
câu lệnh loại bỏ nó.
Sau đó, SQLite cố gắng chèn một hàng mới có hai cột:(id
, min_salary
). Tuy nhiên, nó vi phạm NOT NULL
ràng buộc của cột tiêu đề. Do đó, SQLite sẽ khôi phục giao dịch.
Nếu title
cột không có NOT NULL
ràng buộc, REPLACE
câu lệnh sẽ chèn một hàng mới có cột tiêu đề là NULL
.
Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách sử dụng REPLACE
của SQLite để chèn hoặc thay thế một hàng trong bảng.