Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Unikalne ograniczenia i wstawiaj lub aktualizuj zarówno MySQL, jak i SQLite

Rozwiązanie SQLite (ta sama zasada powinna obowiązywać w mysql)

Możesz po prostu dodać UNIKALNY indeks (przynajmniej dla SQLite, dla którego to jest), aby mieć :-

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`); //<<<<<<<<<<
  • Uwaga AUTO_INCREMENT powoduje awarię SQLite, ponieważ nie jest to słowo kluczowe, prawidłowe słowo kluczowe w SQLite to AUTOINCREMENT . Jednak został pominięty, ponieważ prawdopodobnie nie jest wymagany jako INTEGER PRIMARY KEY (lub niejawny przez określenie PRIMARY KEY (id) ) spowoduje automatyczne wygenerowanie unikalnego identyfikatora, jeśli podczas wstawiania nie zostanie podana żadna wartość dla kolumny.

  • SQLite wymaga INTEGER, a nie INT, dla automatycznie generowanego identyfikatora. Domniemane są wartości NOT NULL i UNIQUE, więc nie ma potrzeby ich określania.

Oto dwa zestawy przykładowych wstawek, z których każdy powiela kombinację identyfikatora uuid/data, w ten sposób aktualizując zamiast wstawiania, a także wstawiając z tym samym identyfikatorem uuid, ale inną datą i na odwrót :-

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

Wyniki to :-



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. łączenie się z MySQL z wiersza poleceń

  2. Błąd CREATE FUNCTION Ta funkcja nie ma żadnych DETERMINISTIC, NO SQL ani READS SQL DATA

  3. Jak uzyskać poprawny zrzut za pomocą mysqldump i pojedynczej transakcji, gdy jednocześnie używany jest DDL?

  4. Jak przechowywać obraz w MySQL?

  5. mysql gdzie ciąg kończy się liczbami