Com o MySQL, se eu tiver um campo, digamos logins, como eu atualizaria 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, aumente os logins em 1.
para que a tabela fique assim ..
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Estou atrás de um comando que, quando executado, inseriria uma nova pessoa (por exemplo, Tom Rogers) ou incrementaria logins se John Jones fosse o nome usado.
INSERT
, não umUPDATE
. Se você deseja fazer uma inserção, precisará obter o máximo e adicionar 1 a ela.Se você pode criar (firstName, lastName) com segurança a PRIMARY KEY ou pelo menos colocar uma chave UNIQUE nelas, poderá fazer o seguinte:
Se você não puder fazer isso, terá que buscar o que quer que seja a chave primária primeiro, então acho que você não conseguiria o que deseja em uma consulta.
fonte
ON DUPLICATE KEY UPDATE
não é completamente seguro para replicação!Você não disse o que está tentando fazer, mas sugeriu isso suficientemente bem nos comentários da outra resposta. Acho que você provavelmente está procurando uma coluna de incremento automático
então nenhum código especial é necessário na inserção. Somente
A API do MySQL possui funções para informar qual ID do usuário foi criado quando você executa esta instrução no código do cliente.
fonte
Eu não sou especialista em MySQL, mas você provavelmente deve procurar gatilhos, por exemplo, ANTES DE INSERIR. No gatilho, você pode executar a consulta select na sua tabela original e, se encontrar alguma coisa, atualize a linha 'logins' em vez de inserir novos valores. Mas tudo isso depende da versão do MySQL que você está executando.
fonte
Esta é mais uma nota de rodapé para várias respostas acima, que sugerem o uso de
ON DUPLICATE KEY UPDATE
, CUIDADO: isso nem sempre é seguro para replicação; portanto, se você planeja crescer além de um único servidor, evite isso e use duas consultas , um para verificar a existência e, em seguida, um segundo a um ou outroUPDATE
quando existe uma linha, ouINSERT
quando isso não acontece.fonte