48 - Remplazar registros (replace)


Problema:

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla si existe:

 drop table if exists libros;

Creamos la tabla:

 create table libros(
  codigo int unsigned default 0,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(20),
  precio decimal(5,2) unsigned,
  primary key(codigo)
 );

Ingresamos algunos registros:

 insert into libros 
   values (10,'Alicia en el pais de las maravillas','Lewis Carroll','Emece',15.4);
 insert into libros 
   values (15,'Aprenda PHP','Mario Molina','Planeta',45.8);
 insert into libros values (23,'El aleph','Borges','Planeta',23.0);

Intentemos ingresar 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.

Para reemplazar el registro con clave 23 por el nuevo empleamos "replace":

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

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

Veamos los casos en los cuales "replace" funciona como "insert":

- ingresamos un registro sin valor de código:

 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.

- ingresamos un registro con un valor de código que 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.

Quitemos la clave primaria:

 alter table libros drop primary key;

Ingresamos un registro con valor de código repetido usando "replace":

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

aparece un mensaje indicando que se afectó 1 registro (el ingresado), no se reemplazó ninguno y ahora hay 2 libros con código 10.




Retornar