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_INCREMENTfü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:-
