Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 15h30   #1
Invité de passage
 
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
Par défaut Erreur Create table/foreign Key

Bonjour,

Je suis actuellement en train de programmer un petit programme de gestion pour mon futur cybercafé en VB .NET et avec une base MySQL. Jusque là tout va bien.

Mais je suis confronté à un problème bizarre, je désire lier ma table "Clients" aux tables "Abonnement"" et "reservations". Pour ce faire j'utilise évidemment la primary key de "Clients" (idClient, qui est un INT).

Cela marche bien lorsque je lie une seule table mais lorsque j'essaye de lier la 2e j'obtiens cette erreur avec mysql workbench :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ERROR 1005: Can't create table 'myg.reservations' (errno: 121)
SQL Statement:
CREATE  TABLE `myg`.`reservations` (
  `idRes` INT NOT NULL ,
  `idClient` INT NULL ,
  `date` VARCHAR(45) NULL ,
  `payement` TINYINT(1)  NULL ,
  PRIMARY KEY (`idRes`) ,
  INDEX `idClient` (`idClient` ASC) ,
  CONSTRAINT `idClient`
    FOREIGN KEY (`idClient` )
    REFERENCES `myg`.`clients` (`idClient` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
Je ne sais pas du tout d’où vient cette erreur, car je fais exactement la même chose dans les 2 cas. A chaque fois, cela fonctionne pour la première table mais pas la deuxième. Ça fait un an que je n'ai plus fait de MySQL alors il se peut que j'aie oublié quelque chose mais j'ai cherché sur les forums je ne vois pas trop...

J'ai déjà essayé toutes les solutions sur http://verysimple.com/2006/10/22/mys...frm-errno-150/ ...


Merci d'avance
vashe9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h44   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Question bête : la table clients est bien créée avant la table reservations ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h53   #3
Invité de passage
 
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
Oui oui car j'arrive à les lier séparément, mais dès que je veux en lier une 2e à client, ça plante. Pour l'instant, j'ai lié clients à cartes_abo et pas à reservations :/

Je ne pense donc pas que ça soit un problème d'incompatibilité des données (l'encodage est utf8 pour les 2)
vashe9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 08h16   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
On peut avoir le script de création de la table clients ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 14h09   #5
Invité de passage
 
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `clients` (
  `idClient` int(11) NOT NULL,
  `nom` varchar(45) DEFAULT NULL,
  `prenom` varchar(45) DEFAULT NULL,
  `dateN` varchar(45) DEFAULT NULL,
  `localite` varchar(45) DEFAULT NULL,
  `cP` int(11) DEFAULT NULL,
  `adresse` varchar(90) DEFAULT NULL,
  `telephone` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idClient`),
  KEY `idClient` (`idClient`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
vashe9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 16h05   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Les deux requêtes de création de table sont passées chez moi sans problème, en commençant bien sûr par la table clients.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 16h24   #7
Invité de passage
 
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
oui séparément ça marche, mais dès qu'on veut lier une 2e ça ne marche plus :

Requête pour créer factures (ou abonnement; ça fait pareil)


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE `factures` (
  `idFacture` int(11) NOT NULL,
  `idClient` int(11) DEFAULT NULL,
  `date` varchar(45) DEFAULT NULL,
  `payement` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`idFacture`)
   INDEX `idClient` (`idClient` ASC) ,
   CONSTRAINT `idClient`
    FOREIGN KEY (`idClient` )
    REFERENCES `myg`.`clients` (`idClient` )
 
ON DELETE NO ACTION
 
ON UPDATE NO ACTION)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
vashe9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 16h54   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Ne donne pas le même nom à la contrainte de clé étrangère. Tu rencontres cette erreur parce que la CONSTRAINT(idClient) existe déjà.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 15h29   #9
Invité de passage
 
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
Ah ben oui c’était ça... Merci beaucoup je pensais que le nom de la foreign key devait être le même que l'attribut.
vashe9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h27.


 
 
 
 
Partenaires

Hébergement Web