sql >> Database >  >> RDS >> Mysql

Unieke beperkingen &invoegen of bijwerken voor zowel MySQL als SQLite

SQLite-oplossing (hetzelfde principe zou moeten gelden in mysql)

Je zou eenvoudig een UNIEKE index kunnen toevoegen (tenminste voor SQLite waarvoor dit is bedoeld), zodat je zou kunnen hebben:-

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`); //<<<<<<<<<<
  • Opmerking AUTO_INCREMENT resulteert in een fout voor SQLite omdat het geen trefwoord is, het juiste trefwoord in SQlite is AUTOINCREMENT . Het is echter weggelaten omdat het waarschijnlijk niet vereist is als INTEGER PRIMARY KEY (of de impliciete door PRIMARY KEY (id) op te geven ) zal ertoe leiden dat er automatisch een unieke id wordt gegenereerd als er bij het invoegen geen waarde voor de kolom wordt opgegeven.

  • SQLite vereist INTEGER, niet INT, voor de automatisch gegenereerde id. NOT NULL en ook UNIQUE zijn geïmpliceerd, dus het is niet nodig om ze op te geven.

Hier zijn twee sets voorbeeldinvoegingen die elk de uuid / datum-combinatie dupliceren, dus updaten in plaats van invoegen en ook invoegen met dezelfde uuid maar met een andere datum en vice versa:-

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`;

Resultaten zijn:-



  1. MySql-opdrachtregeltool voor bulkladen

  2. Datums sorteren in sqlite database?

  3. MySQL Query om willekeurige combinaties van twee tabellen te ontvangen

  4. voeg titels toe voor de geüploade afbeeldingen in nodejs, mysql en reageer