Solusi SQLite (prinsip yang sama harus diterapkan di mysql)
Anda cukup menambahkan indeks UNIK (setidaknya untuk SQLite untuk tujuan ini) sehingga Anda dapat memiliki :-
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`); //<<<<<<<<<<
-
Catatan
AUTO_INCREMENTmengakibatkan kegagalan untuk SQLite karena itu bukan kata kunci, kata kunci yang benar di SQLite adalahAUTOINCREMENT. Namun, itu dihilangkan karena mungkin tidak diperlukan sebagai INTEGER PRIMARY KEY (atau implisit dengan menentukanPRIMARY KEY (id)) akan menghasilkan id unik yang dibuat secara otomatis jika tidak ada nilai yang diberikan untuk kolom saat penyisipan. -
SQLite membutuhkan INTEGER, bukan INT, untuk id yang dibuat secara otomatis. NOT NULL dan juga UNIQUE tersirat sehingga tidak perlu menentukannya.
Berikut adalah dua set contoh sisipan yang masing-masing menduplikasi kombinasi uuid/tanggal sehingga memperbarui alih-alih menyisipkan dan juga menyisipkan dengan uuid yang sama tetapi tanggal yang berbeda dan sebaliknya :-
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`;
Hasilnya adalah :-
