Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 30/05/2006, 17h55   #1
Invité régulier
 
Inscription : septembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 40
Points : 6
Points : 6
Par défaut [SQL] problème avec FOREIGN KEY lors de la création de la base

Bonjour,

Je suis sous Wamp 5 (MySQL 5.0.21-community-nt; PHP 5.1.4; PhpMyAdmin 2.8.0.3 et Apache/2.0.55 (Win32) sous Wxp.

Je tente d'importer un fichier sql pour créer les tables de ma base Films.
L'import se plante lors de l'importation de la première table indiquant des clés étrangères (Film). J'obtiens un numéro d'erreur 1005 lors de la commande CREATE TABLE, et un message d'erreur de numéro 150.
Cela signigie bien que la création de la table a échoué à cause de la contrainte de clé étrangère, qui n'a pas été correctement formulée ?
Je me suis contenté d'utiliser un fichier sql d'un livre que voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#
#   Commandes de création de la base
#
 
# Pour se connecter toujours à la bonne base
 
USE Films;
 
DROP TABLE IF EXISTS Film;  
DROP TABLE IF EXISTS Artiste;  
DROP TABLE IF EXISTS Notation;  
DROP TABLE IF EXISTS Internaute;  
DROP TABLE IF EXISTS Pays;  
DROP TABLE IF EXISTS Role;  
 
# Création des tables                             
 
CREATE TABLE Internaute (email VARCHAR (40) NOT NULL, 
                         nom VARCHAR (30) NOT NULL ,
                         prenom VARCHAR (30) NOT NULL,
                         motDePasse VARCHAR (32) NOT NULL,
                         anneeNaiss INTEGER,
                         PRIMARY KEY (email));
 
CREATE TABLE Pays (code    VARCHAR(4) NOT NULL,
                   nom  VARCHAR (30) DEFAULT 'Inconnu' NOT NULL,
                   langue VARCHAR (30) NOT NULL,
                   PRIMARY KEY (code));
 
CREATE TABLE Artiste  (id INTEGER AUTO_INCREMENT NOT NULL,
                       nom VARCHAR (30) NOT NULL,
                       prenom VARCHAR (30) NOT NULL,
                       anneeNaiss INTEGER,
                       PRIMARY KEY (id),
                       UNIQUE (nom, prenom));
 
CREATE TABLE Film  (titre    VARCHAR (50) NOT NULL,
                    annee    INTEGER NOT NULL,
                    idMES    INTEGER,
                    genre ENUM ('Histoire', 'Drame',
                                'Suspense',  'Catastrophe', 
                                'Policier', 'Thriller', 'Aventures',
                                'Science-fiction', 'Comédie', 
                                'Comédie dramatique',
                                'Comédie sentimentale', 
                                'Fantastique', 'Horreur', 
                                'Action',  'Guerre', 
                                'Dessin animé', 'Documentaire',  
                                'Western') NOT NULL,
                    resume      TEXT,
                    codePays    VARCHAR (4),
                    PRIMARY KEY (titre),
                    FOREIGN KEY (idMES) REFERENCES Artiste,
                    FOREIGN KEY (codePays) REFERENCES Pays);
 
CREATE TABLE Notation (titre VARCHAR (50) NOT NULL,
                       email  VARCHAR (40) NOT NULL,
                       note  INTEGER NOT NULL,
                       PRIMARY KEY (titre, email),
                       FOREIGN KEY (titre) REFERENCES Film,
                       FOREIGN KEY (email) REFERENCES Internaute);
 
CREATE TABLE Role (titre  VARCHAR (50) NOT NULL,
                   idActeur INTEGER NOT NULL,
                   nomRole  VARCHAR(30), 
                   PRIMARY KEY (titre,idActeur),
                   FOREIGN KEY (titre) REFERENCES Film,
                   FOREIGN KEY (idActeur) REFERENCES Artiste);
 
# On quitte mysql
 
exit
Le problème ne pourrait-il pas venir de PhpMyAdmin ou de Wamp 5 si on postule que le fichier sql importé est censé être correcte ?

Merci pour vos avis.

Rosa L.
R.L. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 17h58   #2
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
je viens de créer une bdd films [phpMyAdmin 2.6.1 MySQL 4.1.9-max ], jai copié coller ton code et ça marche
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 18h11   #3
Invité régulier
 
Inscription : septembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 40
Points : 6
Points : 6

Alors qu'elle conclusion dois-je tirer ?

Rosa L.
R.L. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 18h17   #4
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
c bizar faudrait quune personne avec la meme config que toi le teste
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2006, 18h53   #5
Invité régulier
 
Inscription : septembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 40
Points : 6
Points : 6
Je tente de créer ma base avec la console MySQL de Wamp 5 (après avoir supprimer -difficilement- la base).
CREATE DATABASE Films;
Mais, ensuite, j'ai un problème pour importer le fichier sql. Je tape après le prompt "mysql>" :
< Films.sql
Comme l'indique le bouquin... Et j'ai une erreur de message, avec ou sans ;
Quelle est la bonne syntaxe ?
Rosa L.
R.L. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 14h04   #6
Invité régulier
 
Inscription : septembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 40
Points : 6
Points : 6
Trouvé !
Le bouquin et le code correspondant (sur Internet) ne fait pas mention des noms de colonne dans la table référencée.
J'ai donc rajouté (id) pour l'exemple suivant, ainsi que pour les autres :
FOREIGN KEY (idMES) REFERENCES Artiste(id),

Tout est bien passé cette fois, avant de planter sur la syntaxe de la dernière ligne : exit
J'ai mis un ";", puis l'ai supprimé...
J'obtiens alors une erreur 1005/121 cette fois sur la table Internaute :
----------- Réponse de PhpMyAdmin lors de l'import de Films.sql -----
Erreur

requête SQL:

# Création des tables
CREATE TABLE Internaute(
email VARCHAR( 40 ) NOT NULL ,
nom VARCHAR( 30 ) NOT NULL ,
prenom VARCHAR( 30 ) NOT NULL ,
motDePasse VARCHAR( 32 ) NOT NULL ,
anneeNaiss INTEGER,
PRIMARY KEY ( email )
);

MySQL a réponduocumentation
#1005 - Can't create table '.\films\internaute.frm' (errno: 121)
------------------------
C'est à ne rien y comprendre !

Rosa L.
R.L. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 15h36   #7
Invité régulier
 
Inscription : septembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 40
Points : 6
Points : 6
Par défaut [resolu]

Ca fonctionne !!!
Pourquoi ?
A force de tout essayer, je ne sais plus la raison :
- j'ai utilisé UTF8_Unicode_ci pour MySQL et la base
- j'ai supprimé la commande exit à la fin du fichier sql

Quant à savoir pourquoi les noms des colonnes n'étaient pas listées dans les FOREIGN KEY (et dans le bouquin et dans le fichier numérique sql...
Ca dépasse l'entendement.
Merci en tous cas pour l'aide.

Rosa L.
R.L. 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 21h57.


 
 
 
 
Partenaires

Hébergement Web