sql >> Base de Datos >  >> RDS >> Mysql

MySQLdb python inserta una fila o incrementa el conteo en la columna si existe

Aquí hay un enfoque usando el enlace que proporcionó @johnthexii (demo ) (está usando solo MySQL, por lo que no es específico de 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;

Aquí hay un desglose de lo que está pasando:El username El campo está marcado como único, por lo que cualquier intento de insertar un registro con un nombre de usuario existente fallará en el nivel de la base de datos. Luego el INSERT declaración tiene un extra

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

Esto le dice a MySQL que, en lugar de fallar el INSERTAR, simplemente tome los duplicates columna e incrementar en uno. Cuando ejecute los tres comandos INSERT, verá dos registros, stackoverflow.com tiene un duplicates valor de 1, mientras que dba.stackexchange.com tiene un duplicates valor de 0.