REPLACE [LOW_PRIORITY | DELAYED] [INTO]tbl_name[(col_name,...)] VALUES ({expr| DEFAULT},...),(...),...
O:
REPLACE [LOW_PRIORITY | DELAYED] [INTO]tbl_nameSETcol_name={expr| DEFAULT}, ...
O:
REPLACE [LOW_PRIORITY | DELAYED] [INTO]tbl_name[(col_name,...)] SELECT ...
        REPLACE funciona exactamente como
        INSERT, excepto que si un valor de la tabla
        tiene el mismo valor que un nuevo registro para un índice
        PRIMARY KEY o UNIQUE , el
        antiguo registro se borra antes de insertar el nuevo. Consulte
        Sección 13.2.4, “Sintaxis de INSERT”.
      
        Tenga en cuenta que a menos que la tabla tenga un índice
        PRIMARY KEY, o UNIQUE usar
        un comando REPLACE no tiene sentido. Es
        equivalente a INSERT, ya que no hay índice
        para determinar si un nuevo registro duplica otro.
      
        Los valores para todas las columnas se toman de los valores
        especificados en el comando REPLACE.
        Cualquier columna no presente adquiere su valor por defecto,
        como ocurre con INSERT. No puede referirse a
        valores del registro actual y usarlos en el nuevo registro. Si
        usa un comando tal como SET
        , la referencia
        al nombre de columna en la parte derecha se trata como
        col_name =
        col_name + 1DEFAULT(,
        así que es equivalente a col_name)SET
        .
      col_name =
        DEFAULT(col_name) + 1
        Para ser capaz de usar REPLACE, debe tener
        los permisos INSERT y
        DELETE para la tabla.
      
        El comando REPLACE retorna un contador con el
        número de registros afectados. Esta es la suma de registros
        borrados e insertados. Si el contador es 1 para
        REPLACE de un único registro, se inserta un
        registro y no se borra ninguno. Si el contador es mayor que 1,
        uno o más registros se borraron antes de insertar el nuevo. Es
        posible para un único registro reemplazar más de un registro
        antiguo si la tabla contiene múltiples índices únicos y el
        nuevo registro duplica valores para distintos registros antiguos
        en distintos índices únicos.
      
        El contador de registros afectados hace fácil determinar si
        REPLACE sólo añadió un registro o si
        también reemplazo alguno: Compruebe si el contador es 1
        (añadido) o mayor (reemplazados).
      
        Si usa la API de C, el contador de registros afectados puede
        obtenerse usando la función
        mysql_affected_rows().
      
Actualmente, no puede reemplzar en una tabla y seleccionar de la misma en una subconsulta.
        Aquí sigue en más detalle el algoritmo usado (también se usa
        con LOAD DATA ... REPLACE):
      
Intenta insertar el nuevo registro en la tabla
Mientras falle la inserción debido a error de clave duplicada por clave única o primaria:
Borra de la tabla el registro conflictivo que tiene el valor de clave duplicada
Intenta insertar de nuevo el registro en la tabla
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

