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
.