Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/06/2009, 09:42
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Insert ignore into

INSERT IGNORE se usa muy habitualmente cuando es el usuario o la aplicación quien pone el valor de la PK, sea esta numérica y autoincremental o no.
El problema pasa porque cuando se hace una inserción de un registro que se supone nuevo, si la PK que está entrando ya existe, entonces MySQL simplemente "ignora" esa inserción y sigue la operación sin que se desencadene ningún error en la base de datos. De no poner la cláusula IGNORE, te daría un error de "duplicate key" y si no has controlado ese estado puede hacerte colapsar el script, como te dice huesos52.
Ahora bien, si lo que quieres es que si existe la clave, en lugar de ignorarlo, realice una actualización, existen dos formas:
1. Usando en ON DUPLICATE KEY UPDATE..., donde defines qué campos se actualizarán y cómo.
2. Usando REPLACE en lugar de INSERT. Esta forma tiene el inconveniente de reemplazar todo el registro por la nueva versión, por lo cual hay que enviarle todos los valores finales de los campos implicados, o de lo contrario suplantará los valores por los nuevos. Esto quiere decir que no hace un agregado o suma de un valor X a un campo Y sino que lo reemplaza, perdiéndose el valor que estaba en Y anteriormente. Por eso hay que manejarse con cuidado.
¿se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)