PDA

Visualizza versione completa : [MYSQL] On delete cascade


Alhazred
03-09-2008, 16.07.50
Sto provando ad usare la clausola "on delete cascade" su due tabelle in modo da manterere i dati consistenti nel caso venisse cancellata una riga in una delle due tabelle.
La creazione delle tabelle l'ho fatta così:

create table Conto (
numeroConto int not null auto_increment,
saldo float(2) default 0,
primary key (numeroConto)
)
engine=innodb;

create table Possiede (
Cliente varchar(10) primary key,
Conto int not null auto_increment,
Key (conto)
)
engine=innodb;


alter table conto add constraint possiede_delete foreign key (numeroconto) references possiede(conto) on delete cascade;
alter table possiede add constraint conto_delete foreign key (conto) references conto(numeroconto) on delete cascade;

Nel momento in cui provo ad inserire una riga nella tabella conto appare questo messaggio d'errore:
Cannot add or update a child row: a foreign key constraint fails (`ricettelastminute`.`conto`, CONSTRAINT `possiede_delete` FOREIGN KEY (`numeroConto`) REFERENCES `possiede` (`Conto`) ON DELETE CASCADE)
Cosa analoga se l'inserimento lo provo nella tabella possiede, cambia solo l'alter table che mi visualizza dopo "Cannot add or update a child row: a foreign key constraint fails".

Da cosa dipende? come faccio a far funzionare "on delete cascade"?

micmen
01-10-2008, 13.32.45
Secondo me non è possibile dichiarare una chiave esterna come hai fatto tu (in pratica è un riferimento incrociato). Di solito si usa una tabella figlia che ne referenzia una padre. Cancellando una riga nel padre è possibile cancellare tutte le righe correlate dalla figlia. Cmq. per capire meglio potresti dare una descrizione del problema che sta a monte ? Cioè cosa deve fare l'applicativo che usa queste tabelle ?

Alhazred
01-10-2008, 13.49.20
Ho risolto decidendo proprio dando una gerarchia alle tabelle e non ho più problemi.