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.com má duplicates hodnotu 1, zatímco dba.stackexchange.com má duplicates 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