Rozwiązanie SQLite (ta sama zasada powinna obowiązywać w mysql)
Możesz po prostu dodać UNIKALNY indeks (przynajmniej dla SQLite, dla którego to jest), aby mieć :-
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`); //<<<<<<<<<<
-
Uwaga
AUTO_INCREMENTpowoduje awarię SQLite, ponieważ nie jest to słowo kluczowe, prawidłowe słowo kluczowe w SQLite toAUTOINCREMENT. Jednak został pominięty, ponieważ prawdopodobnie nie jest wymagany jako INTEGER PRIMARY KEY (lub niejawny przez określeniePRIMARY KEY (id)) spowoduje automatyczne wygenerowanie unikalnego identyfikatora, jeśli podczas wstawiania nie zostanie podana żadna wartość dla kolumny. -
SQLite wymaga INTEGER, a nie INT, dla automatycznie generowanego identyfikatora. Domniemane są wartości NOT NULL i UNIQUE, więc nie ma potrzeby ich określania.
Oto dwa zestawy przykładowych wstawek, z których każdy powiela kombinację identyfikatora uuid/data, w ten sposób aktualizując zamiast wstawiania, a także wstawiając z tym samym identyfikatorem uuid, ale inną datą i na odwrót :-
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`;
Wyniki to :-
