56 - Restricciones foreign key (acciones) |
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una tabla "provincias" donde registra los nombres de las provincias. 1- Cree las tablas "clientes" y "provincias": create table clientes ( codigo serial, nombre varchar(30), domicilio varchar(30), ciudad varchar(20), codigoprovincia smallint, primary key(codigo) ); create table provincias( codigo serial, nombre varchar(20), primary key(codigo) ); 3- Ingrese algunos registros para ambas tablas: insert into provincias values(1,'Cordoba'); insert into provincias values(2,'Santa Fe'); insert into provincias values(3,'Misiones'); insert into provincias values(4,'Rio Negro'); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Perez Juan','San Martin 123','Carlos Paz',1); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Moreno Marcos','Colon 234','Rosario',2); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Acosta Ana','Avellaneda 333','Posadas',3); 3- Establezca una restricción "foreign key" especificando la acción "en cascade" para actualizaciones y "no_action" para eliminaciones. 4- Intente eliminar el registro con código 3, de "provincias". No se puede porque hay registros en "clientes" al cual hace referencia y la opción para eliminaciones se estableció como "no action". 5- Modifique el registro con código 3, de "provincias". 6- Verifique que el cambio se realizó en cascada, es decir, que se modificó en la tabla "provincias" y en "clientes": select *from provincias; select *from clientes; 7- Intente modificar la restricción "foreign key" para que permita eliminación en cascada. Mensaje de error, no se pueden modificar las restricciones. 8- Intente eliminar la tabla "provincias". No se puede eliminar porque una restricción "foreign key" hace referencia a ella.Ver solución
drop table if exists clientes; drop table if exists provincias; create table clientes ( codigo serial, nombre varchar(30), domicilio varchar(30), ciudad varchar(20), codigoprovincia smallint, primary key(codigo) ); create table provincias( codigo serial, nombre varchar(20), primary key(codigo) ); insert into provincias values(1,'Cordoba'); insert into provincias values(2,'Santa Fe'); insert into provincias values(3,'Misiones'); insert into provincias values(4,'Rio Negro'); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Perez Juan','San Martin 123','Carlos Paz',1); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Moreno Marcos','Colon 234','Rosario',2); insert into clientes(nombre,domicilio,ciudad,codigoprovincia) values('Acosta Ana','Avellaneda 333','Posadas',3); alter table clientes add constraint FK_clientes_codigoprovincia foreign key (codigoprovincia) references provincias(codigo) on update cascade on delete no action; delete from provincias where codigo=3; update provincias set codigo=9 where codigo=3; select *from provincias; select *from clientes; alter table clientes add constraint FK_clientes_codigoprovincia foreign key (codigoprovincia) references provincias(codigo) on update cascade on delete cascade; drop table provincias;