Giải pháp SQLite (nguyên tắc tương tự nên áp dụng trong mysql)
Bạn có thể chỉ cần thêm một chỉ mục DUY NHẤT (ít nhất là cho SQLite mà chỉ mục này dành cho) để bạn có thể có:-
DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
`id` INTEGER, //<<<<<<<<<< See notes below
`uuid` VARCHAR ( 64 ) NOT NULL,
`name` VARCHAR ( 32 ) NOT NULL,
`date` BIGINT NULL,
PRIMARY KEY ( `id` )
);
CREATE UNIQUE INDEX IF NOT EXISTS uuid_date ON `users` (`uuid`,`date`); //<<<<<<<<<<
-
Lưu ý
AUTO_INCREMENT
dẫn đến lỗi cho SQLite vì nó không phải là từ khóa, từ khóa chính xác trong SQlite làAUTOINCREMENT
. Tuy nhiên, nó đã bị bỏ qua vì nó có thể không được yêu cầu như INTEGER PRIMARY KEY (hoặc ẩn bằng cách xác địnhPRIMARY KEY (id)
) sẽ dẫn đến một id uniqiue được tạo tự động nếu không có giá trị nào được cung cấp cho cột khi chèn. -
SQLite yêu cầu INTEGER, không phải INT, cho id được tạo tự động. NOT NULL và UNIQUE được ngụ ý vì vậy không cần chỉ định chúng.
Dưới đây là hai bộ ví dụ chèn từng bản sao kết hợp uuid / date, do đó cập nhật thay vì chèn và cũng chèn cùng uuid nhưng khác ngày và ngược lại:-
INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 1st','20180101');
INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 2nd','20180101'); -- <<<< DUPLICATE
INSERT OR REPLACE INTO `users` VALUES(null,'Fred99999999','Fred Bloggs the 2nd','20180101'); -- <<<< different uuid same date
INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 2nd','99999999'); -- <<<< same uuid different date
INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','20180202');
INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','20180202');
INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred99999999','Fred NotBloggs the 1st','20180202');
INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','99999999');
SELECT * FROM `users`;
Kết quả là:-