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

MySQLdb python wstawia wiersz lub zwiększa liczbę kolumn, jeśli istnieje

Oto podejście wykorzystujące link podany przez @johnthexii (demo ) (używa tylko MySQL, więc nie jest specyficzny dla Pythona)

CREATE TABLE UserNames (`username` varchar(35) unique, `duplicates` int);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('dba.stackexchange.com/', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

Oto podział tego, co się dzieje:username pole jest oznaczone jako unikalne, więc każda próba wstawienia rekordu z istniejącą nazwą użytkownika zakończy się niepowodzeniem na poziomie bazy danych. Następnie INSERT oświadczenie ma dodatkowy

ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1

To mówi MySQL, że zamiast nieudanej operacji INSERT, po prostu bierze duplicates kolumna i przyrost o jeden. Po uruchomieniu trzech poleceń INSERT zobaczysz dwa rekordy, stackoverflow.com ma duplicates wartość 1, natomiast dba.stackexchange.com ma duplicates wartość 0.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Drzewo MySQL uporządkowane według rodzica i dziecka

  2. Nieznana kolumna zagregowana w klauzuli posiadającej

  3. Jak mogę wywołać procedurę składowaną na zdalnym serwerze MySQL Ubuntu?

  4. reset php/timeout/połączenie z serwerem?

  5. XAMPP — Błąd:nieoczekiwane zamknięcie MySQL