Sintaxe REPLACE


REPLACE funciona exatamente como o INSERT, exceto que se um registro antigo na tabela tem o mesmo valor que um novo registro em um índice UNIQUE ou PRIMARY KEY, o registro antigo é deletado antes que o novo registro seja inserido. Leia "Sintaxe INSERT".

Em outras palavras, você não pode acessar os valores do registro antigo em uma instrução REPLACE. Em algumas versões antigas do MariaDB aparentemente você podia fazer isto, mas era um bug que já foi arrumado.

Par aestar apto a utilizar REPLACE você deve ter privilégios INSERT e DELETE para a tabela.

Quando você utilizar um comando REPLACE, mysql_affected_rows() retornará 2 se a nova linha substituir uma linha antiga. Isto é porque uma linha foi inserida depois que a linha duplicada foi deletada.

Este fato torna fácil determinar se REPLACE adicionou ou subsitituiu uma linha: verifique se o valor de linhas afetadas é 1 (adicionado) ou 2 (substituido).

Note que a menos que a tabela utilize índices UNIQUE ou PRIMARY KEY, utilizar um comando REPLACE replace não faz sentido. Ele se torna equivalente a um INSERT, porque não existe índice a ser usado para determinar se uma nova linha duplica outra.

Seqgue aqui o algoritmo usado em mais detalhes: (Ele também é usado com LOAD DATA ... REPLACE.

Retornar