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_INCREMENT
mengakibatkan 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 :-