SQLite-løsning (samme princip bør gælde i mysql)
Du kan simpelthen tilføje et UNIKT indeks (i det mindste for SQLite, som dette er til), så du kunne have :-
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`); //<<<<<<<<<<
-
Bemærk
AUTO_INCREMENT
resulterer i en fejl for SQLite, da det ikke er et nøgleord, det korrekte nøgleord i SQLite erAUTOINCREMENT
. Den er dog udeladt, da den sandsynligvis ikke er påkrævet som INTEGER PRIMÆR NØGLE (eller den implicitte ved at angivePRIMARY KEY (id)
) vil resultere i, at der automatisk genereres et unikt id, hvis der ikke er angivet nogen værdi for kolonnen ved indsættelse. -
SQLite kræver INTEGER, ikke INT, for det automatisk genererede id. NOT NULL og også UNIQUE er underforstået, så det er ikke nødvendigt at specificere dem.
Her er to sæt eksempler på indsættelser, der hver duplikerer uuid/dato-kombinationen og opdaterer således i stedet for at indsætte og indsætter også med samme uuid, men forskellig dato og omvendt :-
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`;
Resultaterne er:-