Incrementar un campo de base de datos en 1


Con MySQL, si tengo un campo, digamos inicios de sesión, ¿cómo actualizaría ese campo por 1 dentro de un comando sql?

Estoy tratando de crear una consulta INSERT, que crea FirstName, LastName y logins. Sin embargo, si la combinación de FirstName y LastName ya existe, incremente los inicios de sesión en 1.

Así que la tabla podría verse así..

firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3

Estoy detrás de un comando que cuando se ejecuta, insertaría una nueva persona (es decir, Tom Rogers) o incrementaría los inicios de sesión si John Jones fue el nombre usado..

Author: Matt, 2010-05-04

5 answers

Actualizando una entrada:

Un simple incremento debería hacer el truco.

UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

Inserte una nueva fila, o Actualice si ya está presente:

Si desea actualizar una fila existente anteriormente, o insertarla si aún no existe, puede usar el REPLACE syntax o el INSERT...ON DUPLICATE KEY UPDATE opción (Como Rob Van Dam demostró en su respuesta).

Insertando una nueva entrada:

O quizás estás buscando algo como INSERT...MAX(logins)+1? Esencialmente, ejecutaría una consulta muy similar a la siguiente, quizás un poco más compleja dependiendo de sus necesidades específicas:

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable
 239
Author: Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:45

Si usted puede hacer con seguridad (FirstName, LastName) la CLAVE PRIMARIA o al menos poner una clave ÚNICA en ellos, entonces usted podría hacer esto:

INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1)
ON DUPLICATE KEY UPDATE logins = logins + 1;

Si no puede hacer eso, entonces tendría que obtener lo que sea que la clave primaria es primero, por lo que no creo que pueda lograr lo que desea en una consulta.

 64
Author: Rob Van Dam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-04 05:19:35

No dijiste lo que estás tratando de hacer, pero lo insinuaste lo suficientemente bien en los comentarios a la otra respuesta. Creo que probablemente estás buscando una columna de incremento automático

create table logins (userid int auto_increment primary key, 
  username varchar(30), password varchar(30));

Entonces no se necesita ningún código especial en insert. Solo

insert into logins (username, password) values ('user','pass');

La API MySQL tiene funciones para decirle qué userid se creó cuando ejecuta esta instrucción en código cliente.

 2
Author: Ken Bloom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-04 05:06:38

No soy experto en MySQL, pero probablemente debería buscar en los disparadores, por ejemplo, ANTES de INSERTAR. En el disparador puede ejecutar select query en su tabla original y si encuentra algo, simplemente actualice la fila 'logins' en lugar de insertar nuevos valores. Pero todo esto depende de la versión de MySQL que esté ejecutando.

 2
Author: Serg Gulko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-04 05:30:53

Esto es más una nota al pie de una serie de respuestas anteriores que sugieren el uso de ON DUPLICATE KEY UPDATE, TENGA EN CUENTA que esto es NO siempre seguro de replicación, por lo que si alguna vez planea crecer más allá de un solo servidor, querrá evitar esto y usar dos consultas, una para verificar la existencia, y luego una segunda para UPDATE cuando existe una fila, o INSERT cuando no existe.

 1
Author: oucil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-31 17:23:20