Existe uma maneira fácil para INSERT
uma linha quando ela não existe, ou UPDATE
se existe, usando uma consulta MySQL?
sql
mysql
insert-update
upsert
blub
fonte
fonte
MERGE
. Em geral, o conceito é frequentemente chamado de"UPSERT"
.geb
etopic
ela funcionará (ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)
).MERGE
mas não tenho certeza se sua sintaxe é idêntica à do SQL Server.NULL
, para permitir que oauto_increment
comportamento funcione (que, caso contrário, sim, funciona como você supõe ; consulte dev.mysql.com/doc/refman/5.5/en/example-auto-increment. html ).VALUES(col)
para obter o valor do argumento de inserção em caso de duplicação. Exemplo:ON DUPLICATE UPDATE b = VALUES(b), c = VALUES(c)
Sei que essa é uma pergunta antiga, mas o Google me levou aqui recentemente, então imagino que outros venham aqui também.
@chaos está correto: existe a
INSERT ... ON DUPLICATE KEY UPDATE
sintaxe.No entanto, a pergunta original feita sobre o MySQL especificamente, e no MySQL existe a
REPLACE INTO ...
sintaxe. IMHO, esse comando é mais fácil e direto de usar para upserts. Do manual:Observe que este não é o SQL padrão. Um exemplo do manual:
Edit: Apenas um aviso justo que
REPLACE INTO
não é comoUPDATE
. Como o manual diz,REPLACE
exclui a linha, se existir, depois insere uma nova. (Observe as engraçadas "2 linhas afetadas" no exemplo acima.) Ou seja, ele substituirá os valores de todas as colunas de um registro existente (e não apenas atualizará algumas colunas.) O comportamento do MySQLREPLACE INTO
é muito parecido com o do SqliteINSERT OR REPLACE INTO
. Consulte esta pergunta para algumas soluções alternativas, se você deseja atualizar apenas algumas colunas (e nem todas), se o registro já existir.fonte