sql >> Database teknologi >  >> RDS >> Mysql

Unikke begrænsninger og indsæt eller opdater for både MySQL og SQLite

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 er AUTOINCREMENT . Den er dog udeladt, da den sandsynligvis ikke er påkrævet som INTEGER PRIMÆR NØGLE (eller den implicitte ved at angive PRIMARY 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:-



  1. ERRO 1215. MySql InnoDB

  2. COUNT(id) vs. COUNT(*) i MySQL

  3. Hvorfor brug af enhedstests er en stor investering i højkvalitetsarkitektur

  4. Hvordan opretter man forbindelse til Amazon RDS via SSL?