Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQLdb python insère une ligne ou incrémente le nombre sur la colonne si elle existe

Voici une approche utilisant le lien fourni par @johnthexii (démo ) (il utilise uniquement MySQL, il n'est donc pas spécifique à 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;

Voici une ventilation de ce qui se passe :Le username est marqué comme unique, toute tentative d'insertion d'un enregistrement avec un nom d'utilisateur existant échouera au niveau de la base de données. Puis le INSERT déclaration a un supplément

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

Cela indique à MySQL qu'au lieu d'échouer l'INSERT, il suffit de prendre les duplicates colonne et incrémenter de un. Lorsque vous exécutez les trois commandes INSERT, vous verrez deux enregistrements, stackoverflow.com a un duplicates valeur de 1, tandis que dba.stackexchange.com a un duplicates valeur de 0.