48 - Remplazar registros (replace)


"replace" reemplaza un registro por otro.

Cuando intentamos ingresar con "insert" un registro que repite el valor de un campo clave o indexado con índice único, aparece un mensaje de error indicando que el valor está duplicado. Si empleamos "replace" en lugar de "insert", el registro existente se borra y se ingresa el nuevo, de esta manera no se duplica el valor único.

Si tenemos la tabla "libros" con el campo "codigo" establecido como clave primaria e intentamos ingresar ("insert") un valor de código existente, aparece un mensaje de error porque no está permitido repetir los valores del campo clave. Si empleamos "replace" en lugar de "insert", la sentencia se ejecuta reemplazando el registro con el valor de código existente por el nuevo registro.

Veamos un ejemplo. Tenemos los siguientes registros almacenados en "libros":

codigo	 titulo		autor		editorial	precio
_______________________________________________________________
10	Alicia en ..	Lewis Carroll	Emece		15.4
15	Aprenda PHP	Mario Molina	Planeta		45.8
23	El aleph	Borges		Planeta		23.0

Intentamos insertar un registro con valor de clave repetida (código 23):

 insert into libros values(23,'Java en 10 minutos','Mario Molina','Emece',25.5);

Aparece un mensaje de error indicando que hay registros duplicados.

Si empleamos "replace":

 replace into libros values(23,'Java en 10 minutos','Mario Molina','Emece',25.5);

la sentencia se ejecuta y aparece un mensaje indicando que se afectaron 2 filas, esto es porque un registro se eliminó y otro se insertó.

"replace" funciona como "insert" en los siguientes casos: - si los datos ingresados no afectan al campo único, es decir no se ingresa valor para el campo indexado:

 replace into libros(titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Borges','Paidos',28);

aparece un mensaje indicando que se afectó un solo registro, el ingresado, que se guarda con valor de código 0.

- si el dato para el campo indexado que se ingresa no existe:

 replace into libros values(30,'Matematica estas ahi','Paenza','Paidos',12.8);

aparece un mensaje indicando que se afectó solo una fila, no hubo reemplazo porque el código no existía antes de la nueva inserción.

- si la tabla no tiene indexación. Si la tabla "libros" no tuviera establecida ninguna clave primaria (ni índice único), podríamos ingresar varios registros con igual código:

 replace into libros values(1,'Harry Potter ya la piedra filosofal','Hawking','Emece',48);

aparecería un mensaje indicando que se afectó 1 registro (el ingresado), no se reemplazó ninguno y ahora habría 2 libros con código 1.

Retornar