Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
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/06/2005, 16h13   #1
Invité de passage
 
Inscription : avril 2005
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 7
Points : 2
Points : 2
Par défaut mysql et foreign key

Bonjour à tous et merci d'avance, j'ai essayé de créer une BD sous mysql, dont l(instruction est la suivante :
create database gestion;

create table enseignant
(
idenseignant smallint not null primary key auto_increment,
nom varchar(20) not null,
prenom varchar(20) not null,
departement varchar(60) not null,
email varchar(45)
) TYPE=InnoDB;

create table entreprise
(
identreprise smallint not null primary key auto_increment,
nom varchar(20) not null,
adresse varchar(30) not null,
ville varchar(15)
) TYPE=InnoDB;

create table stage
(
idstage smallint not null primary key auto_increment,
duree smallint not null,
datedebut date not null,
idstagiaire smallint not null,
nom varchar(20) not null,
prenom varchar(20) not null,
ville varchar(15) not null,
email varchar(45),
fonction varchar(15) not null,
identreprise smallint not null foreign key references entreprise(identreprise),
idenseignant smallint not null foreign key references enseignant(idenseignant),
) TYPE=InnoDB;

create table visite
(
idstage smallint not null foreign key refernces stage(idstage),
datevisite date primary key,
rapport varchar(60) not null
) TYPE=InnoDB;

l'hors de l'exécution j'ai le message suivant : MySQL a répondu:


#1064 - Erreur de syntaxe près de 'foreign key references entreprise(identreprise),
idenseignant s' à la ligne 12
merci
skoukni_brahim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2005, 16h40   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
Tout dépend de ta version de MySQL. Certaines version en dessous de la 4.1 n'acceptent ni l'IR, ni les sous requêtes, ni les requêtes ensemblistes, ni les triggers, ni les procédures stockées, ni les UDF, ni les domaines... OUF !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2005, 18h14   #3
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Il y a ça aussi:
Citation:
Envoyé par Aide MySQL
Les deux tables doivent être de type InnoDB, dans la table, il doit y avoir un INDEX où les clés étrangères sont listées comme première colonne, dans le même ordre, et dans la table référencée, il doit y avoir un INDEX où les colonnes référencées sont listées comme premières colonnes, dans le même ordre. Les préfixes d'index ne sont pas supportés pour les clés de contrainte.

InnoDB ne crée pas automatiquement les index nécessaires pour les clés étrangères : vous devez ls créer vous-même. Les index sont nécessaires pour accélérer les vérifications de contrainte, et éviter un scan de table.
Comme dans l'exemple cité (http://dev.mysql.com/doc/mysql/fr/in...nstraints.html)

il faut créer l'index avant de définir les FK :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                      price DECIMAL,
                      PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                      PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      INDEX (product_category, product_id),    <<<<-------------
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ON DELETE RESTRICT,
                      INDEX (customer_id),                     <<<<-------------
                      FOREIGN KEY (customer_id)
                        REFERENCES customer(id)) TYPE=INNODB;
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h16.


 
 
 
 
Partenaires

Hébergement Web