Création
d'entreprise
Posez votre question Signaler

[SQL] Erreur SQL

Ju - Dernière réponse le 2 nov. 2008 à 11:44
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
Lire la suite 

[SQL] Erreur SQL »

6 réponses
Réponse
+0
moins plus
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
crabs- 19 janv. 2006 à 15:41
Salut,
Ta clé étrangère numSign elle parait avoir une valeur bizarre pour une clé
étrangère : ''
A+, crabs
Ju - 19 janv. 2006 à 15:53
Oui en fait je ne lui affecte pas de valeur car elle est auto-incrémentée
crabscrabs - 19 janv. 2006 à 16:19
Là, 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
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « [SQL] Erreur SQL » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?