Soluciones

English version (when available)

P06.001- Crea las siguientes tablas:

TA (a int, b int) CP(a)

TB (c int, d int) CP(c) CAj(d) >> TA (borrados: propagar, modificaciones: propagar)

TC (e int, f int) CP(e) CAj(f) >> TB (borrados: propagar, modificaciones: propagar)

create table TA(a int, b int, primary key(a)) engine=innodb;

create table TB(c int, d int, primary key(c), 
  foreign key (d) references TA(a) on delete cascade on update cascade) 
  engine=innodb;

create table TC(e int, f int, primary key(e), 
  foreign key (f) references TB(c) on delete cascade on update cascade) 
  engine=innodb;


P06.002- Inserta los siguientes datos
TA(1,10)
TA(2,20)
TA(3,30)
TB(100,1)
TB(200,1)
TB(300,2)
TB(400,NULL)
TC(1000,100)
TC(2000,100)
TC(3000,NULL)

insert into TA values (1,10);
insert into TA values (2,20);
insert into TA values (3,30);
insert into TB values (100,1);
insert into TB values (200,1);
insert into TB values (300,2);
insert into TB values (400,NULL);
insert into TC values (1000,100);
insert into TC values (2000,100);
insert into TC values (3000,NULL);


P06.003- Borra TA(2,20) y comprueba los cambios que se han producido en las 3 tablas

delete from TA where a = 2;


P06.004- Modifica TA(1,10) a TA(15,10) y comprueba los cambios que se han producido en las 3 tablas.

update TA set a=15 where a = 1;


P06.005- Borra TC(2000,100) y comprueba los cambios que se han producido en las 3 tablas.

delete from TC where e=2000;


P06.006- Borra TA(3,30) y comprueba los cambios que se han producido en las 3 tablas.

delete from TA where a=3;


P06.007- Borra TB(100,15) y comprueba los cambios que se han producido en las 3 tablas.

delete from TB where c=100;


P06.008- Borra TC(3000,NULL) y comprueba los cambios que se han producido en las 3 tablas.

delete from TC where e=3000;


P06.009- Borra TB(400,NULL) y comprueba los cambios que se han producido en las 3 tablas.

delete from TB where c=400;


P06.010- Borra TA(15,10) y comprueba los cambios que se han producido en las 3 tablas: ¿ESTÁN LAS 3 TABLAS VACÍAS?

delete from TA where a=15;


P06.011- Vuelve a crear las tablas:

TA (a int, b int) CP(a)
TB (c int, d int) CP(c) CAj(d) >> TA
(borrados: anular, modificaciones: anular)
TC (e int, f int) CP(e) CAj(f) >> TB
(borrados: anular, modificaciones: anular)

drop table TC;
drop table TB;
drop table TA;

create table TA(a int, b int, primary key(a)) engine=innodb;

create table TB(c int, d int, primary key(c), 
  foreign key (d) references TA(a) 
    on delete set null on update set null) 
  engine=innodb;

create table TC(e int, f int, primary key(e), 
  foreign key (f) references TB(c) 
    on delete set null on update set null) 
  engine=innodb;


P06.012- Vuelve a rellenar las tablas:
TA(1,10)
TA(2,20)
TA(3,30)
TB(100,1)
TB(200,1)
TB(300,2)
TB(400,NULL)
TC(1000,100)
TC(2000,100)
TC(3000,NULL)

insert into TA values (1,10);
insert into TA values (2,20);
insert into TA values (3,30);
insert into TB values (100,1);
insert into TB values (200,1);
insert into TB values (300,2);
insert into TB values (400,NULL);
insert into TC values (1000,100);
insert into TC values (2000,100);
insert into TC values (3000,NULL);


P06.013- Ejecuta las siguientes órdenes:

Borra TA(2,20)
Modifica TA(1,10) a TA(15,10)
Modifica TB(100,NULL) a TB(150,NULL)

¿Queda algún valor de clave ajena distinto de NULL?

delete from TA where a = 2;
update TA set a=15 where a = 1;
update TB set c=150 where c = 100;


P06.014- Vuelve a crear las tablas:

TA (a int, b int) CP(a)
TB (c int, d int) CP(c) CAj(d) >> TA (borrados: propagar)
TC (e int, f int) CP(e) CAj(f) >> TB (modificaciones: anular)

TA(1,10)
TA(2,20)
TA(3,30)
TB(100,1)
TB(200,1)
TB(300,2)
TB(400,NULL)
TC(1000,100)
TC(2000,100)
TC(3000,NULL)

drop table TC;
drop table TB;
drop table TA;

create table TA(a int, b int, primary key(a)) engine=innodb;

create table TB(c int, d int, primary key(c), 
  foreign key (d) references TA(a) 
    on delete cascade) 
  engine=innodb;

create table TC(e int, f int, primary key(e), 
  foreign key (f) references TB(c) 
    on update set null) 
  engine=innodb;
insert into TA values (1,10);
insert into TA values (2,20);
insert into TA values (3,30);
insert into TB values (100,1);
insert into TB values (200,1);
insert into TB values (300,2);
insert into TB values (400,NULL);
insert into TC values (1000,100);
insert into TC values (2000,100);
insert into TC values (3000,NULL);


P06.015- Borra TA(1,10): ¿qué ha pasado?

delete from TA where a=1;


P06.016- Borra TA(2,20): ¿qué ha pasado?

delete from TA where a=2;


P06.017- Modifica TB(100,1) a TB(170,1): ¿qué ha pasado?

update TB set c=170 where c=100;


P06.018- Vuelve a intentar borrar TA(1,10): ¿por qué ahora sí?

delete from TA where a=1;


P06.162- a) Crea una tabla: mitabla(a int, b int, c int) CP(a)
b) Crea una tabla: miotratabla(d int, e int) CP(d) CAj(e)>>mitabla, borrados propagar, modificaciones anular
c) Inserta en mitabla las filas: (a=3,c=10), (a=2,c=20);
d) Inserta en miotratabla las filas: (d=30,e=2), (d=20,e=2);
e) Borra todas las filas de todas las tablas con una única instrucción.

create table mitabla(a int, b int, c int, primary key(a)) engine=innodb;
create table miotratabla(d int, e int, primary key(d), 
   foreign key(e) references mitabla(a) 
   on delete cascade on update set null) engine=innodb;
insert into mitabla (a,c) values (3,10), (2,20);
insert into miotratabla (d,e) values (30,2), (20,2);
delete from mitabla;


P06.163- a) Crea una tabla: TA(a int, b int, c int) CP(a)
b) Crea una tabla: TB(d int, e int) CP(d) CAj(e)>>TA, borrados propagar, modificaciones anular
c) Inserta en TA las filas: (a=3,c=10), (a=2,c=20);
d) Inserta en TB el contenido de TA, almacenando en TB.d los valores de la columna TA.c, y en TB.e lo que haya en la columna TA.a, con una única instrucción a partir de una consulta sobre TA.

create table TA(a int, b int, c int, primary key(a)) engine=innodb;
create table TB(d int, e int, primary key(d), 
   foreign key(e) references TA(a) on delete cascade on update set null) engine=innodb;
insert into TA(a,c) values (3,10), (2,20);
insert into TB(d,e) select c,a from TA;


P06.164- a) Crea una tabla: TA(a int, b int, c int) CP(a)
b) Inserta en TA las filas: (a=3,b=100,c=10), (a=2,b=200,c=20);
c) Crea una tabla: TB(d int, e int) CP(d) CAj(d)>>TA, borrados propagar, modificaciones rechazar
d) Inserta en TB el contenido de TA, almacenando en TB.d los valores de la columna TA.a, y en TB.e el valor 1000, con una única instrucción a partir de una consulta sobre TA.

create table TA(a int, b int, c int, primary key(a)) engine=innodb;
insert into TA(a,b,c) values (3,100,10), (2,200,20);
create table TB(d int, e int, primary key(d), 
     foreign key(d) references TA(a) on delete cascade) engine=innodb;
insert into TB(d,e) select a,1000 from TA;


P06.165- a) Crea una tabla: mitabla(a int, b int, c int) CP(a)
b) Crea una tabla: miotratabla(d int, e int) CP(d) CAj(e)>>mitabla, borrados rechazar, modificaciones propagar
c) Inserta en mitabla las filas: (a=3,b=10), (a=2,b=20);
d) Inserta en miotratabla las filas: (d=30,e=2), (d=20,e=2);
e) Elimina del sistema todas las tablas

create table mitabla(a int, b int, c int, primary key(a)) engine=innodb;
create table miotratabla(d int, e int, primary key(d), 
   foreign key(e) references mitabla(a) 
   on update cascade) engine=innodb;
insert into mitabla (a,b) values (3,10), (2,20);
insert into miotratabla (d,e) values (30,2), (20,2);
drop table miotratabla;
drop table mitabla;
Este ejercicio obliga a eliminar las tablas en el orden correcto.

P06.207- a) Crea una tabla: mitabla(a int, b int, c int) CP(a,c)
b) Crea una tabla: miotratabla(d int, e int) CP(d,e) CAj(d,e)>>mitabla, borrados propagar, modificaciones rechazar
c) Inserta en mitabla las filas: (a=3,c=10), (a=2,c=20);
d) Inserta en miotratabla las filas: (d=3,e=10);
e) Borra todas las filas de todas las tablas con una única instrucción.

create table mitabla(a int, b int, c int, primary key(a,c)) engine=innodb;
create table miotratabla(d int, e int, 
	primary key(d,e), 
   foreign key(d,e) references mitabla(a,c) on delete cascade) engine=innodb;
insert into mitabla (a,c) values (3,10), (2,20);
insert into miotratabla (d,e) values (3,10);
delete from mitabla;


P06.208- a) Crea una tabla: tablaA(a0 int, a1 int, a2 int) CP(a1,a2)
b) Inserta en tablaA las filas: (a0=3,a1=30,a2=10), (a0=2,a1=200,a2=20);
c) Crea una tabla: tablaB(b0 int, b1 int) CP(b0,b1) CAj(b0,b1)>>tablaA, borrados propagar, modificaciones rechazar
d) Inserta en tablaB las filas: (b0=30,b1=10);
e) Borra todas las filas de todas las tablas con una única instrucción.

create table tablaA(a0 int, a1 int, a2 int, primary key(a1,a2)) engine=innodb;
insert into tablaA (a0,a1,a2) values (3,30,10), (2,200,20);
create table tablaB(b0 int, b1 int, 
	primary key(b0,b1), 
   foreign key(b0,b1) references tablaA(a1,a2) on delete cascade) engine=innodb;
insert into tablaB (b0,b1) values (30,10);
delete from tablaA;


P06.209- a) Crea una tabla: tablaA(a0 int, a1 int, a2 int) CP(a0)
b) Inserta en tablaA las filas: (a0=3,a1=30,a2=10), (a0=2,a1=200,a2=20);
c) Crea una tabla: tablaB(b0 int, b1 int) CP(b0) CAj(b1)>>tablaA, borrados propagar, modificaciones propagar
d) Inserta en tablaB las filas: (b0=30,b1=3), (b0=31,b1=3);
e) Modifica tablaA.a0 y tablaB.b1 y ponles el valor 300 cuando valgan 3, todo ello con una única instrucción.

create table tablaA(a0 int, a1 int, a2 int, primary key(a0)) engine=innodb;
insert into tablaA (a0,a1,a2) values (3,30,10), (2,200,20);
create table tablaB(b0 int, b1 int, primary key(b0), 
   foreign key(b1) references tablaA(a0) 
   on delete cascade on update cascade) engine=innodb;
insert into tablaB (b0,b1) values (30,3),(31,3);
update tablaA set a0=300 where a0=3;


P06.210- a) Crea una tabla: tablaA(a int, b int, c int) CP(a)
b) Inserta en tablaA las filas: (a=3,b=30,c=10), (a=2,b=200,c=20);
c) Crea una tabla: tablaB(x int, y int) CP(x) CAj(y)>>tablaA, borrados propagar, modificaciones propagar
d) Inserta en tablaB las filas: (x=1,y=3), (x=2,y=3);
e) Modifica tablaA.a y tablaB.y y ponles el valor 300 cuando valgan 3, todo ello con una única instrucción.

create table tablaA(a int, b int, c int, primary key(a)) engine=innodb;
insert into tablaA (a,b,c) values (3,30,10), (2,200,20);
create table tablaB(x int, y int, primary key(x), 
   foreign key(y) references tablaA(a) 
   on delete cascade on update cascade) engine=innodb;
insert into tablaB (x,y) values (1,3),(2,3);
update tablaA set a=300 where a=3;


P06.211- a) Crea una tabla: tablaA(a int, b int, c int) CP(a)
b) Inserta en tablaA las filas: (a=3,b=30,c=10), (a=2,b=200,c=20);
c) Crea una tabla: tablaB(x int, y int) CP(x) CAj(y)>>tablaA, borrados propagar, modificaciones propagar
d) Inserta en tablaB las filas: (x=1,y=3), (x=2,y=3);
e) Borra las filas de tablaA.a=3 y tablaB.y=3 con una única instrucción.

create table tablaA(a int, b int, c int, primary key(a)) engine=innodb;
insert into tablaA (a,b,c) values (3,30,10), (2,200,20);
create table tablaB(x int, y int, primary key(x), 
   foreign key(y) references tablaA(a) 
   on delete cascade on update cascade) engine=innodb;
insert into tablaB (x,y) values (1,3),(2,3);
delete from tablaA where a=3;


P06.212- a) Crea una tabla: TA(a int, b int) CP(a)
b) Inserta en TA las filas: (a=3,b=10), (a=2,b=21);
c) Crea una tabla: TB(d int, e int) CP(d) CAj(e)>>TA, borrados propagar, modificaciones anular

d) Inserta en TB el contenido de TA, almacenando en TB.d los valores de la columna TA.b, y en TB.e lo que haya en la columna TA.a, con una única instrucción a partir de una consulta sobre TA.

create table TA(a int, b int, primary key(a)) engine=innodb;
insert into TA(a,b) values (3,10), (2,21);

create table TB(d int, e int, primary key(d), 
   foreign key(e) references TA(a) on delete cascade on update set null) engine=innodb;
	
insert into TB(d,e) select b,a from TA;


P06.213- a) Crea una tabla: TA(a int, b int) CP(a)
b) Inserta en TA las filas: (a=3,b=10), (a=2,b=21), (a=1,b=11);
c) Crea una tabla: TB(d int, e int) CP(d) CAj(e)>>TA, borrados propagar, modificaciones anular

d) Inserta en TB el contenido de TA, almacenando en TB.d los valores de la columna TA.b, y en TB.e el valor 1, con una única instrucción a partir de una consulta sobre TA.

create table TA(a int, b int, primary key(a)) engine=innodb;
insert into TA(a,b) values (3,10), (2,21), (1,11);

create table TB(d int, e int, primary key(d), 
   foreign key(e) references TA(a) on delete cascade on update set null) engine=innodb;
	
insert into TB(d,e) select b,1 from TA;


P06.214- a) Crea una tabla: unatabla(a int, b int) CP(a)
b) Crea una tabla: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados rechazar, modificaciones propagar
c) Inserta en unatabla las filas: (a=3,b=100), (a=2,b=210), (a=1,b=110);

d) Inserta en "otratabla" el contenido de "unatabla", almacenando en otratabla.d los valores de la columna unatabla.b, y en otratabla.e el valor 2, con una única instrucción a partir de una consulta sobre "unatabla".

create table unatabla(a int, b int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) on update cascade) engine=innodb;
insert into unatabla(a,b) values (3,100), (2,210), (1,110);

insert into otratabla(d,e) select b,2 from unatabla;


P06.215- a) Crea una tabla: unatabla(a int, b int) CP(a)
b) Crea una tabla: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados propagar, modificaciones propagar
c) Inserta en unatabla las filas: (a=3,b=100), (a=2,b=210);
d) Inserta en otratabla las filas: (d=100,e=3), (d=101,e=3);

e) Elimina la fila unatabla(a=3,b=100) con tantas instrucciones como haga falta.

create table unatabla(a int, b int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) 
   on delete cascade on update cascade) engine=innodb;
insert into unatabla(a,b) values (3,100), (2,210);
insert into otratabla(d,e) values (100,3), (101,3);

delete from unatabla where a=3;
La definición "on delete cascade" permite borrar todas las filas en una única instrucción.

P06.216- a) Crea una tabla: unatabla(a int, b int, c int) CP(a)
b) Crea una tabla: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados rechazar, modificaciones propagar
c) Inserta en unatabla las filas: (a=3,b=100), (a=2,b=200);
d) Inserta en otratabla las filas: (d=30,e=2), (d=20,e=2);
e) Elimina del sistema todas las tablas.

create table unatabla(a int, b int, c int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) 
   on update set null) engine=innodb;
insert into unatabla (a,b) values (3,100), (2,200);
insert into otratabla (d,e) values (30,2), (20,2);
drop table otratabla;
drop table unatabla;
Este ejercicio obliga a eliminar las tablas en el orden correcto.

P06.217- a) Crea: unatabla(a int, b int, c int) CP(a)
b) Crea: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados propagar, modificaciones propagar.
c) Inserta en unatabla las filas: (a=3,b=100), (a=2,b=200);
d) Inserta en otratabla las filas: (d=30,e=2), (d=20,e=NULL);
e) Elimina todas las filas de "unatabla".

create table unatabla(a int, b int, c int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) 
   on delete cascade on update cascade) engine=innodb;
insert into unatabla (a,b) values (3,100), (2,200);
insert into otratabla (d,e) values (30,2), (20,NULL);

delete from unatabla;
Se pide borrar las filas de "unatabla": otratabla(20,NULL) NO debería ser eliminada.

P06.218- a) Crea: unatabla(a int, b int, c int) CP(a)
b) Crea: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados propagar, modificaciones propagar
c) Inserta en unatabla las filas: (a=3,b=101), (a=2,b=201);
d) Inserta en otratabla las filas: (d=30,e=2), (d=20,e=NULL);
e) Elimina todas las filas de "unatabla" y sus referencias en "otratabla" en una sola instrucción.

create table unatabla(a int, b int, c int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) 
   on delete cascade on update cascade) engine=innodb;
insert into unatabla (a,b) values (3,101), (2,201);
insert into otratabla (d,e) values (30,2), (20,NULL);
delete from unatabla;


P06.219- a) Crea una tabla: unatabla(a int, b int) CP(a)
b) Crea una tabla: otratabla(d int, e int) CP(d) CAj(e)>>unatabla, borrados rechazar, modificaciones propagar
c) Inserta en unatabla las filas: (a=3,b=100), (a=2,b=210);
d) Inserta en otratabla las filas: (d=100,e=3), (d=101,e=3);

e) Elimina la fila unatabla(a=3,b=100) con tantas instrucciones como haga falta.

create table unatabla(a int, b int, primary key(a)) engine=innodb;
create table otratabla(d int, e int, primary key(d), 
   foreign key(e) references unatabla(a) 
   on update cascade) engine=innodb;
insert into unatabla(a,b) values (3,100), (2,200), (1,110);
insert into otratabla(d,e) values (100,3), (101,3);

delete from otratabla where e=3;
delete from unatabla where a=3;
Como se rechaza el borrado en "otratabla" hay que hacer varios delete.