Partage
  • Partager sur Facebook
  • Partager sur Twitter

Integrité Référencielle

    22 février 2012 à 20:40:14

    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
    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown