Eliminar un registros y los registros relacionados a esta, MySql

publicado por: Anonymous

saben como puedo eliminar un registro y a la vez todos registros relacionados a esta , actualmente tengo tengo la tabla tb_artista en la cual quiero eliminar un registro de esa tabla con el id AR1, a la vez en tb_album quiero eliminar una tabla con id AL1 que tiene el id AR1 como llave forarena, y a su vez quiero eliminar un registro de la tabla musica que tiene como llave foranea el id AL1, nose si me dejo explicar aqui esta mi script mysql:

_x000D_

_x000D_

create database ProyectoMusica;_x000D_
use ProyectoMusica;_x000D_
_x000D_
_x000D_
create table tb_artista(_x000D_
idartista varchar(200) primary key,_x000D_
nombreartista varchar(90),_x000D_
anonacimiento varchar(90),_x000D_
descripcion1 text,_x000D_
descripcion2 text,_x000D_
fotoartista varchar(90)_x000D_
);_x000D_
_x000D_
insert into tb_artista values('AR1','Adam Gointer','18/02/1988','Nose','Nose','AdamGointer');_x000D_
insert into tb_artista values('AR3','E Gointer','18/02/1988','Nose','Nose', 'EGointer');_x000D_
_x000D_
_x000D_
_x000D_
create table tb_album(_x000D_
idalbum varchar(200) primary key,_x000D_
idartista varchar(200),_x000D_
nombrealbum varchar(200),_x000D_
tipo varchar(20),_x000D_
fotoalbum varchar(100),_x000D_
fechacreacion varchar(20),_x000D_
FOREIGN KEY (idartista) REFERENCES tb_artista(idartista)_x000D_
);_x000D_
_x000D_
insert into tb_album values('AL1','AR1','Dulce Agonia','FREE','DulceAgonia', CURDATE());_x000D_
_x000D_
create table tb_musica (_x000D_
idmusica varchar(200) primary key,_x000D_
idalbum varchar(200),_x000D_
nombremusica varchar(90),_x000D_
tamaño decimal(8,2),_x000D_
FOREIGN KEY (idalbum) REFERENCES tb_album(idalbum)_x000D_
);

_x000D_

_x000D_

_x000D_

Actualizo Intente de esta forma pero no me sale:

_x000D_

_x000D_

 delete tal,tar,tm from  tb_artista as tar inner join  tb_album as tal_x000D_
 on tar.idartista=tal.idartista inner join tb_musica as tm on tal.idalbum = tm.idalbum_x000D_
 where tar.idartista = 'AR1'

_x000D_

_x000D_

_x000D_

solución

Necesitas establecer las relaciones de tus llaves foráneas con:

ON DELETE CASCADE

y también

ON UPDATE CASCADE

De modo que cuando elimines un registro padre, el registro hijo asociado se elimine también

Si apenas estas creando tu base de datos, tu tabla debería tener una declaración similar a esta

CONSTRAINT fk_album_artista FOREIGN KEY(idartista) 
REFERENCES tb_artista(idartista) ON DELETE CASCADE ON UPDATE CASCADE

RECUERDA QUE DEPENDIENDO DE LO QUE NECESITES HACER, TIENES:

  1. On delete cascade: Que elimina el registro asociado a la llave primaria
  2. On delete restrict: Impide llevar a cabo dicha acción
  3. On delete SET NULL: Establece a NULL los valores asociados a la llave primaria que se esta eliminando
  4. On delete no action: en MYsql poner NO ACTION tiene el mismo efecto que poner RESTRICT es decir impedir que dicha acción se lleve
    a cabo
Respondido por: user75901

Leave a Reply

Your email address will not be published. Required fields are marked *