Soluciones

English version (when available)

T07.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;


T07.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);


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

delete from TA where a = 2;


T07.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;


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

delete from TC where e=2000;


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

delete from TA where a=3;


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

delete from TB where c=100;


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

delete from TC where e=3000;


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

delete from TB where c=400;


T07.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;


T07.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;


T07.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);


T07.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;


T07.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);


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

delete from TA where a=1;


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

delete from TA where a=2;


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

update TB set c=170 where c=100;


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

delete from TA where a=1;