salut!je me suis renseigné et j'ai vu que pour pouvoir modifier/supprimer une entrée dans la table père on met ON UPDATE CASCADE /ON DELETE CASCADE dans la table fils. Voici le code MySQL de la création de la table:
Code : SQL - Sélectionner
CREATE TABLE Compagnie
(comp CHAR(4), nrue INTEGER(3),
rue CHAR(20), ville CHAR(15),
nomComp CHAR(15),
CONSTRAINT pk_Compagnie PRIMARY KEY(comp))
ENGINE=INNODB;
CREATE TABLE Pilote
(brevet CHAR(6), nom CHAR(15),
nbHVol DECIMAL(7,2), compa CHAR(4),
CONSTRAINT pk_Pilote
PRIMARY KEY(brevet),
CONSTRAINT fk_Pil_compa_Comp
FOREIGN KEY (compa)
REFERENCES Compagnie(comp)
ON UPDATE CASCADE)
ENGINE=INNODB;
CREATE TABLE Avion
(immat CHAR(6), typeAvion CHAR(15), nbhVol DECIMAL(10,2),
proprio CHAR(4) NOT NULL, CONSTRAINT pk_Avion PRIMARY KEY(immat),
INDEX (proprio),
CONSTRAINT fk_Avion_comp_Compag
FOREIGN KEY(proprio) REFERENCES Compagnie(comp)
ON UPDATE CASCADE)
ENGINE=INNODB;
CREATE TABLE Affreter
(compAff CHAR(4), immat CHAR(6), dateAff DATE, nbPax INTEGER(3),
CONSTRAINT pk_Affreter PRIMARY KEY (compAff, immat, dateAff),
INDEX (immat),
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat )
ON UPDATE CASCADE,
INDEX (compAff),
CONSTRAINT fk_Aff_comp_Compag
FOREIGN KEY(compAff) REFERENCES Compagnie(comp)
ON UPDATE CASCADE)
ENGINE=INNODB;
ce que je veux c'est pouvoir entrée une ligne dans la table compagnie et ensuite je veux modifier la valeur du clé primaire de cette table
UPDATE compagnie SET comp='AO' WHERE comp='AF'
mais j'obtient une erreur de contrainte: "UPDATE compagnie SET comp='AO' WHERE comp='AF' Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`pcd_exam`.`avion`, CONSTRAINT `fk_Avion_comp_Compag` FOREIGN KEY (`proprio`) REFERENCES `compagnie` (`comp`))
Notons que la ligne comp='AF' a été déjà saisie
POURQUOI J'AI UNE ERREUR ALORS QUE J'AI MIS UNE CLAUSE ON UPDATE à TOUS MES TABLES FILS
Integrité Référencielle
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.