Con MySQL, si tengo un campo, por ejemplo, inicios de sesión, ¿cómo haría para actualizar ese campo en 1 dentro de un comando sql?
Estoy tratando de crear una consulta INSERT, que crea nombre, apellido e inicios de sesión. Sin embargo, si la combinación de firstName y lastName ya existe, incremente los inicios de sesión en 1.
entonces la mesa podría verse así ...
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Estoy detrás de un comando que, cuando se ejecuta, inserta una nueva persona (es decir, Tom Rogers) o aumenta los inicios de sesión si John Jones era el nombre utilizado ...
INSERT
, no unUPDATE
. Si desea hacer una inserción, necesitará obtener el máximo y agregarle 1.Si puede hacer de forma segura (firstName, lastName) la PRIMARY KEY o al menos ponerles una clave UNIQUE, entonces puede hacer esto:
Si no puede hacer eso, entonces tendría que buscar lo que sea esa clave primaria primero, por lo que no creo que pueda lograr lo que desea en una consulta.
fuente
ON DUPLICATE KEY UPDATE
replicación no es completamente segura!No dijiste lo que intentas hacer, pero lo insinuaste bastante bien en los comentarios a la otra respuesta. Creo que probablemente estés buscando una columna de incremento automático
entonces no se necesita un código especial en la inserción. Sólo
La API MySQL tiene funciones para indicarle qué ID de usuario se creó cuando ejecuta esta instrucción en el código del cliente.
fuente
No soy experto en MySQL, pero probablemente deberías buscar activadores, por ejemplo, ANTES DE INSERTAR. En el activador, puede ejecutar la consulta de selección en su tabla original y, si encuentra algo, simplemente actualice la fila 'inicios de sesión' en lugar de insertar nuevos valores. Pero todo esto depende de la versión de MySQL que esté ejecutando.
fuente
Esto es más una nota al pie de una serie de respuestas anteriores que sugieren el uso de
ON DUPLICATE KEY UPDATE
, CUIDADO , que esto NO siempre es seguro para la replicación, por lo que si alguna vez planea crecer más allá de un solo servidor, querrá evitar esto y usar dos consultas , uno para verificar la existencia, y luego a una segunda ya seaUPDATE
cuando existe una fila, oINSERT
cuando no lo hace.fuente