Insert e Update na mesma query

333 views
Skip to first unread message

Jackson Ferreira de Andrade Mafra

unread,
Aug 25, 2010, 11:06:53 AM8/25/10
to php-b...@googlegroups.com, list...@googlegroups.com, CodeIgniter Brasil
Galera, to com um Problema com uma SQL.

No INSERT caso ocorra uma exceção por chave duplicada ele faz um UPDATE dos campos listados na cláusula ON DUPLICATE KEY.

INSERT INTO minha_tabela VALUES (meu_valor1, meu_valor2, meu_valor3)
       ON DUPLICATE KEY campo2=meu_valor2, campo3=meu_valor3

Eu queria que tivesse o contrário: Que desse um insert caso não existisse onde dar update ;)


att.
Jackson F. de A. Mafra
Front-End / Back-End Software Engineer
twitter: @jacksonfdam | LinkedIn: http://linkedin.com/in/jacksonfdam

Stephan A. de Souza

unread,
Aug 25, 2010, 11:51:08 AM8/25/10
to php-b...@googlegroups.com, list...@googlegroups.com, CodeIgniter Brasil
Como assim onde não existir onde dar update?

2010/8/25 Jackson Ferreira de Andrade Mafra <jacks...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.



--
Stephan Alan de Souza
Analista de Sistemas Ação Direta | http://www.acaodireta.com.br
Forum Admin ragnaBR | http://forum.ragnabr.net


Lucien Campos

unread,
Aug 25, 2010, 11:54:20 AM8/25/10
to php-b...@googlegroups.com
Se eu entendi ele quer o seguinte

if (registro existe) {
    update
} else {
    insert
}

2010/8/25 Stephan A. de Souza <bla...@gmail.com>

Jackson Ferreira de Andrade Mafra

unread,
Aug 25, 2010, 12:07:39 PM8/25/10
to php-b...@googlegroups.com, list...@googlegroups.com, CodeIgniter Brasil
Sorry, pelo que postei ficou noob meu problema...

O Ademir deu a Solução....

http://www.electrictoolbox.com/mysql-insert-ignore/

INSERT IGNORE INTO mytable
(primaryKey, field1, field2)
VALUES
('abc', 1, 2);

Valews...

Jackson Ferreira de Andrade Mafra

unread,
Aug 25, 2010, 12:12:23 PM8/25/10
to php-b...@googlegroups.com, list...@googlegroups.com, CodeIgniter Brasil
A SQL fica assim, sem ter que fazer if no php...


INSERT IGNORE INTO
    minha_tabela
VALUES
    (meu_valor1, meu_valor2, meu_valor3)
    ON DUPLICATE KEY campo2=meu_valor2, campo3=meu_valor3


Jackson Ferreira de Andrade Mafra

unread,
Aug 25, 2010, 4:09:41 PM8/25/10
to php-b...@googlegroups.com, list...@googlegroups.com, CodeIgniter Brasil
A quem possa Interessar:

http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key-update-and-replace-into/

The two statements have different impact for INNODb table.
The REPLACE INTO acts as DELETE/INSERT for duplicates.
The INSERT ON DUPLIACTE UPDATE is true update.

If you have a child table defined with “on delete CASCADE”, the REPLACE INTO will delete the child record too.

I will use INSERT ON DUPLICATE rather than the REPLACE INTO for the above reason.


No 4 comentario o cara fez um teste de desempenho...



att.
Jackson F. de A. Mafra
Front-End / Back-End Software Engineer
twitter: @jacksonfdam | LinkedIn: http://linkedin.com/in/jacksonfdam


2010/8/25 Jackson Ferreira de Andrade Mafra <jacks...@gmail.com>
Galera, to com um Problema com uma SQL.

Stefano Martins

unread,
Aug 30, 2010, 6:46:32 PM8/30/10
to php-brasil
Eu faria o seguinte: Primeiro faria um SELECT na base de dados. Caso a
quantidade de registros retornada fosse zero, aí sim eu faria o
INSERT; Caso fosse igual ou maior a um, eu faria o UPDATE.

Não recomendo pra ninguém jogar a lógica no banco de dados.


Abraços!

On Aug 25, 5:09 pm, Jackson Ferreira de Andrade Mafra
<jacksonf...@gmail.com> wrote:
> A quem possa Interessar:
>
> http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-ke...
>
> The two statements have different impact for INNODb table.
> The REPLACE INTO acts as DELETE/INSERT for duplicates.
> The INSERT ON DUPLIACTE UPDATE is true update.
>
> If you have a child table defined with “on delete CASCADE”, the REPLACE INTO
> will delete the child record too.
>
> I will use INSERT ON DUPLICATE rather than the REPLACE INTO for the above
> reason.
>
> No 4 comentario o cara fez um teste de desempenho...
>
> att.
> Jackson F. de A. Mafra
> Front-End / Back-End Software Engineer
> twitter: @jacksonfdam | LinkedIn:http://linkedin.com/in/jacksonfdam
>
> 2010/8/25 Jackson Ferreira de Andrade Mafra <jacksonf...@gmail.com>
Reply all
Reply to author
Forward
0 new messages