[SQL] Erreur SQL

bonjour a tous,

je voudrais savoir quels sont les causes et comment remédier a ce message d'erreur :

Impossible d'ajouter un enregistrement fils : une constrainte externe l'empèche

Merci d'avance
bonne journée

3 réponses

  1. Je vais apporter plus de précisions vu la bousculade pour m'aider lol
    Cette erreur est générée a l'issue de cette requete:

    INSERT INTO concerner(NumSupp, NumSign, DateDebut, DateFin, DateRupt, TypeC, TxMensr, Com, BH)VALUES('1-801V','','12/09/2005','11/09/2006','','CAE','30%','','20h')

    NumSupp et NumSign sont des clés érangères et ma base de données est en InnoDB
    0
    1. Salut,
      Ta clé étrangère numSign elle parait avoir une valeur bizarre pour une clé
      étrangère : ''
      A+, crabs
      0
    2. @crabsOui en fait je ne lui affecte pas de valeur car elle est auto-incrémentée
      0
    3. @crabsLà, je comprends plus le principe, je croyais qu'une clé étrangère devait exister
      dans la table dont elle est la clé primaire avant de pouvoir être ajoutée dans une
      ligne d'une table dans laquelle elle représente une relation.
      Donc pour moi, impossible d'avoir une clé étrangère en auto_increment dans
      une table relation.
      A+, crabs
      0
  2. Je vais essayer d'être maintenant plus général, sa vous motivera peut etre un peu plus pour m'aider! lol

    Voila ma question : Comment fait-on pour générer des clés étrangères sous mySQL sous le format innoDB ?
    J'ai lu qu'il fallait créer les INDEX nécessaires au préalable, pouvez-vous m'en dire plus?
    0
    1. bonjour,

      je vais donner un exemple en m'inspirant de mon propre projet :

      la création de mes tables se fait via un scrpit php :

      $link = "
      CREATE TABLE `hd_utilisateur` (
        `id_user` int(11) NOT NULL auto_increment PRIMARY KEY,
        `nom` text NOT NULL,
        `prenom` text NOT NULL,
        `email` varchar(255) NOT NULL,
        `username` varchar(16) NOT NULL,
        `passwd` varchar(50) NOT NULL,
        `telephone` varchar(50) NOT NULL,
        `user_mobile` varchar(50) NOT NULL,
        `poste_interne` varchar(50) NOT NULL,
        `fax` varchar(50) NOT NULL,
        `adresse` varchar(200) NOT NULL,
        `profession` text NOT NULL,
        `operateur_helpdesk` text NOT NULL,
        `fk_division` int(11),
         FOREIGN KEY(fk_division) REFERENCES hd_division(id_division) ON DELETE CASCADE ON UPDATE CASCADE,
         INDEX(fk_division),
         INDEX(id_user)    
        
      )TYPE=INNODB;"; 
        
      $res = mysql_query($link) or die(mysql_error());
      
      
      $link = "
      CREATE TABLE `hd_type_incident` (
        `id_type_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
        `type_incident` text NOT NULL, 
        `description` varchar(200) NOT NULL,
        `fk_user` int(11),
         FOREIGN KEY(fk_user) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
         INDEX(fk_user)
      )TYPE=INNODB;";  
      
      $res = mysql_query($link) or die(mysql_error());
      
      
      
      


      chaque type d'incident est affecté à un utilisateur spécifique , il faut d'abord créer la table hd_utilisateur ensuite la table hd-type_incident , le type INNODB est trés susceptible aux relations.

      en effet on crée les index sur les clés étrangères .

      mo message arrive en retard mais j'espère que ça va aider certains d'entre vous ;)

      cordialement
      0