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

Décisions SGBD Discussion :

mysql et foreign key


Sujet :

Décisions SGBD

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    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
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

Discussions similaires

  1. mysql et les foreign key
    Par soad dans le forum Installation
    Réponses: 12
    Dernier message: 17/08/2006, 09h40
  2. [MySQL] Utilisation des Foreign Key
    Par Regnak dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/08/2006, 15h37
  3. [mysql]table avec foreign key
    Par samjung dans le forum Langage SQL
    Réponses: 24
    Dernier message: 24/11/2005, 14h42
  4. Foreign Key sur Mysql
    Par lemagicien dans le forum Outils
    Réponses: 1
    Dernier message: 23/09/2005, 13h39
  5. foreign key dans mysql
    Par guillevin dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 08/04/2004, 15h07

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