48 - Remplazar registros (replace) |
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.