Incrementar um campo de database por 1

Com o MySQL, se eu tenho um campo, digamos, logins, como eu faria para atualizar esse campo por 1 dentro de um comando sql?

Estou tentando criar uma consulta INSERT, que cria firstName, lastName e logins. No entanto, se a combinação de firstName e lastName já existir, incremente os logins em 1.

então a tabela pode ficar assim …

firstName----|----lastName----|----logins John Jones 1 Steve Smith 3 

Eu estou atrás de um comando que, quando executado, inseria uma nova pessoa (por exemplo, Tom Rogers) ou incrementaria logins se John Jones fosse o nome usado.

Atualizando uma input:

Um incremento simples deve fazer o truque.

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

Inserir nova linha ou Atualizar se já estiver presente:

Se você quiser atualizar uma linha existente anteriormente, ou inseri-la se ela ainda não existir, você pode usar a syntax REPLACE ou a opção INSERT...ON DUPLICATE KEY UPDATE (Como Rob Van Dam demonstrou em sua resposta ).

Inserindo uma nova input:

Ou talvez você esteja procurando por algo como INSERT...MAX(logins)+1 ? Essencialmente, você executaria uma consulta muito parecida com a seguinte – talvez um pouco mais complexa, dependendo de suas necessidades específicas:

 INSERT into mytable (logins) SELECT max(logins) + 1 FROM mytable 

Se você puder fazer com segurança (firstName, lastName) a PRIMARY KEY ou pelo menos colocar uma chave UNIQUE neles, então você poderia fazer isto:

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

Se você não pode fazer isso, então você teria que buscar o que quer que seja essa chave primária primeiro, então eu não acho que você poderia conseguir o que você quer em uma consulta.

Você não disse o que está tentando fazer, mas sugeriu bem nos comentários para a outra resposta. Eu acho que você provavelmente está procurando por uma coluna de incremento automático

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

então nenhum código especial é necessário na inserção. Somente

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

A API do MySQL tem funções para lhe dizer qual userid foi criado quando você executa esta declaração no código do cliente.

Eu não sou especialista em MySQL, mas você provavelmente deve procurar em gatilhos, por exemplo, BEFORE INSERT. No gatilho você pode executar a consulta select em sua tabela original e se encontrar algo apenas atualize os logins da linha ao invés de inserir novos valores. Mas tudo isso depende da versão do MySQL que você está executando.

Esta é mais uma nota de rodapé de algumas das respostas acima que sugerem o uso de ON DUPLICATE KEY UPDATE , CUIDADO que isso nem sempre é seguro para replicação, então se você planeja crescer além de um único servidor, você vai querer evitar isso e use duas consultas, uma para verificar a existência e, em seguida, uma segunda para UPDATE quando existir uma linha ou INSERT quando não existir.