sql >> Databáze >  >> RDS >> Mysql

MySQLdb python vloží řádek nebo zvýší počet sloupců, pokud existuje

Zde je přístup pomocí odkazu, který poskytl @johnthexii (demo ) (používá pouze MySQL, takže není specifický pro Python)

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;

Zde je rozpis toho, co se děje:username pole je označeno jako jedinečné, takže jakýkoli pokus o vložení záznamu s existujícím uživatelským jménem selže na úrovni databáze. Poté INSERT výpis má navíc

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

To říká MySQL, že místo selhání INSERT vezme pouze duplicates sloupec a zvýšit o jednu. Když spustíte tři příkazy INSERT, uvidíte dva záznamy, stackoverflow.comduplicates hodnotu 1, zatímco dba.stackexchange.comduplicates hodnotu 0.




  1. Má MySQL dvě různá hesla?

  2. Počítání nových zákazníků za měsíc

  3. Problémy s createdb v postgresu

  4. Převod databáze Postgresql z SQL_ASCII obsahující smíšené typy kódování na UTF-8