IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Pb d'insertion avec InnoDB


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Pb d'insertion avec InnoDB
    Bonjour tt le monde,

    Voilà je vous expose le problème. Je prends le cas simple ou je garde deux tables. Une table acheter et une table particulier.
    Dans la table acheter, ma PK est id_achat et ma FK est id_particulier. Cette table se présente comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `acheter` (
      `id_achat` int(11) NOT NULL auto_increment,
      `date_achat` date NOT NULL default '0000-00-00',
      `etat_achat` varchar(50) NOT NULL default '',
      `groupe_achat` varchar(50) NOT NULL default '',
      `id_particulier` int(11) NOT NULL default '0',
      `id_produit` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id_achat`),
      KEY `id_particulier` (`id_particulier`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Les contraintes pour la table `acheter` :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `acheter`
      ADD CONSTRAINT `acheter_ibfk_1` FOREIGN KEY (`id_particulier`) REFERENCES `particulier` (`id_particulier`);
    Dans ma table particulier ma PK est id_particulier comme vous pouvez le voir ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `particulier` (
      `id_particulier` int(11) NOT NULL auto_increment,
      `nom_particulier` varchar(50) NOT NULL default '',
      `prenom_particulier` varchar(50) NOT NULL default '',
      `adresse_particulier` varchar(100) NOT NULL default '',
      `codepostal_particulier` int(11) NOT NULL default '0',
      `ville_particulier` varchar(50) NOT NULL default '',
      `telephone_particulier` int(11) NOT NULL default '0',
      `email_particulier` varchar(50) NOT NULL default '',
      `pass_particulier` varchar(10) NOT NULL default '',
      PRIMARY KEY  (`id_particulier`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    Il n’y a pas de contraintes ici.
    Dans la 1ere table acheter, id_particulier référence la PK de la table particulier. Mon problème est que lorsque je veux insérer des données dans ma table acheter j’ai l’erreur suivante :
    #1216 - Impossible d'ajouter un enregistrement fils : une contrainte externe l'empeche.

    Pour info, mes 2 tables sont bien en InnoDB. J’ai passer id_particulier en Index dans ma 1ere table sinon dans « gestion des relations » je ne pouvais pas relier mon id_particulier mais je ne sais pas si l’erreur vient de là...

    J'attends vos avis, merci d’avance

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ma question peut paraître un peu bête vu que visiblement tu es à l'aise avec les histoires de clefs primaires/étrangères, mais quand tu insères un enregistrement dans "achat", est-ce que le "id_particulier" existe dans la table "particulier"?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord merci d'avoir pris le temps de me répondre. Ensuite je t'assure je suis vraiment pas calé avec ces histoires de clefs au contraires je débute donc je galère
    Le problème c'est que je ne peux même pas faire d'enregistrement dans ma table "acheter" depuis que je lui ai mis une FK et c'est ça que je pige pas...
    Dans la gestion des relations j'ai fait ça:
    id_particulier particulier->id particulier CASCADE ON DELETE CASCADE ON UPDATE
    Sinon pour info si ça peut aider, ma table acheter est une table de jointure, qui permet de tracer les achats, entre ma table Particulier et ma table Produit.

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par jinn
    Ensuite je t'assure je suis vraiment pas calé avec ces histoires de clefs au contraires
    Dans ce cas je réitère ma question: quand tu insères un enregistrement dans "achat", est-ce que le "id_particulier" existe dans la table "particulier"?


    A part ça, il y a peut-être des trucs à revoir dans ton modèle de données, notamment pour "etat_achat" et "groupe_achat". Par ailleurs, où sont les quantités achetées?

    Et puis la numérotation des achats 1 par 1 me semble bizarre, on aurait plutôt tendance à faire une facture et pour cette facture mettre: num_facture, num_client, date, etc. et faire une relation entre la facture et les achats.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon en fait pour clore le thread, j'ai repris tranquillement toutes mes tables ou il y avait des FK, je les ai repassés en MyISAM, et ensuite j'ai tapé mes requêtes pour insérer les nouvelles clés, insérer des données puis j'ai repassés mes tables ou ils y avaient des contraintes de clés en InnoDB et maintenant c ok, plus d'erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. [MySQL] Problème avec InnoDB
    Par Jovial dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/08/2006, 16h54
  3. Problème de requete avec Innodb
    Par silef dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2004, 12h54
  4. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo