SQLite-Lösung (dasselbe Prinzip sollte in mysql gelten)
Sie könnten einfach einen UNIQUE-Index hinzufügen (zumindest für SQLite, für das dies gilt), sodass Sie Folgendes haben könnten:-
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`); //<<<<<<<<<<
-
Beachten Sie
AUTO_INCREMENT
führt zu einem Fehler für SQLite, da es kein Schlüsselwort ist, das richtige Schlüsselwort in SQlite istAUTOINCREMENT
. Es wurde jedoch weggelassen, da es wahrscheinlich nicht als INTEGER PRIMARY KEY (oder implizit durch Angabe vonPRIMARY KEY (id)
erforderlich ist ) führt dazu, dass automatisch eine eindeutige ID generiert wird, wenn beim Einfügen kein Wert für die Spalte angegeben wird. -
SQLite erfordert INTEGER, nicht INT, für die automatisch generierte ID. NOT NULL und auch UNIQUE sind impliziert, also müssen sie nicht angegeben werden.
Hier sind zwei Sätze von Beispiel-Einfügungen, die jeweils die UUID/Datum-Kombination duplizieren und somit aktualisieren, anstatt einzufügen, und auch mit derselben UUID, aber unterschiedlichem Datum einfügen und umgekehrt:-
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`;
Ergebnisse sind:-