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 :

Phpmyadmin et contraintes d'intégrité référentielle ?


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut Phpmyadmin et contraintes d'intégrité référentielle ?
    Bonjour,

    Je ne trouve pas comment créer les contraintes d'intégrité référentielle avec phpmyadmin quelqu'un peut me dire comment faire svp ? En évitant d'effacer ma base et de recommencer à 0 car elle existe déjà ?

    Merci d'avance...

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    je crois qu'il faut les taper dans l'editeur sql




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE parent (id INT NOT NULL,
                         PRIMARY KEY (id)
    ) ENGINE=INNODB;
    CREATE TABLE child (id INT, parent_id INT,
                        INDEX par_ind (parent_id),
                        FOREIGN KEY (parent_id) REFERENCES parent(id)
                          ON DELETE CASCADE
    ) ENGINE=INNODB;
    Dernière modification par Eusebius ; 09/10/2006 à 11h33. Motif: pensez aux balises [code] (#)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    je crois que ça depend aussi de la version de mysql que tu utilises. je crois que ya des versions qui ne gèrent pas assez bien les contraintes referentielles (sous reserve)

  4. #4
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par ouatmad
    je crois que ça depend aussi de la version de mysql que tu utilises. je crois que ya des versions qui ne gèrent pas assez bien les contraintes referentielles (sous reserve)
    EasyPHP 1.7 et c'est du PHP4 si je ne me trompe pas. Autrement dit il faut que je recommence ma base ?

  5. #5
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Je l'ai faite simple au maximum:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE  TABLE emprunteur( numemp INT,
    nomemp VARCHAR( 30  ) ,
    nomfilm VARCHAR( 60  ) ,
     FOREIGN  KEY ( nomfilm )  REFERENCES films( nomfilm )  ON  DELETE  CASCADE  );
    Est-elle correcte svp ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    ça devrait pouvoir marché. Au fait il parait que les contraintes d'integrité sont gérées a partir de la version 3 de mysql.
    Si tu as des difficultés pour les contraintes reférentielles, tu peux utiliser Dbdesigner, ça genere aisément la base (ses contraintes avec)

  7. #7
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par ouatmad
    ça devrait pouvoir marché. Au fait il parait que les contraintes d'integrité sont gérées a partir de la version 3 de mysql.
    Si tu as des difficultés pour les contraintes reférentielles, tu peux utiliser Dbdesigner, ça genere aisément la base (ses contraintes avec)
    Oui merci pour le conseil, je ne connaissais pas, je viens de l'installer. Pourrais tu me dire comment je peux indiquer les contraintes stp ?

  8. #8
    Membre régulier Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Points : 114
    Points
    114
    Par défaut
    Ca m'a donné:

    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
     
    CREATE TABLE emprunteur (
      numemp INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      nomemp VARCHAR(20) NULL,
      numfilm INTEGER UNSIGNED NULL,
      PRIMARY KEY(numemp)
    );
     
    CREATE TABLE films (
      numfilm INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      emprunteur_numemp INTEGER UNSIGNED NOT NULL,
      nomfilm VARCHAR(45) NULL,
      genrefilm VARCHAR(20) NULL,
      posfilm INTEGER UNSIGNED NULL,
      PRIMARY KEY(numfilm, emprunteur_numemp),
      INDEX films_FKIndex1(emprunteur_numemp)
    );
    Je sais pas trop si c'est correct, moi ça me fait bizarre quand meme

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 274
    Points : 169
    Points
    169
    Par défaut alter
    Bonjour,

    Sinon je pense on peut creer les tables avec phpmyadmin et ajouter des alters apres, genre:

    ALTER TABLE messages ADD FOREIGN KEY ( idexp ) REFERENCES utilisateurs( id ) ON DELETE CASCADE

    Cordialement.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut help
    désolé je débarque mais bon je rame sec la je n'aarive pas a faire une clé étrangère voila mes table :

    REQUETE CREATION DRO :
    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
    19
     
    CREATE TABLE `dro` (
    `id_dro` TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `nom_dro` VARCHAR( 25 ) NOT NULL 
    ) TYPE = InnoDB ; // permet de mettre des clé étrangère!
     
     
    REQUETE CREATION AGENCE : 
     
    CREATE TABLE agence (
    id_agence INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nom_agence VARCHAR(25)NOT NULL,
    trigramme VARCHAR(3)NOT NULL,
    adresse_rue_agence VARCHAR(20)NOT NULL,
    adresse_ville_agence VARCHAR(20) NOT NULL,
    adresse_cp_agence INT NOT NULL,
    id_dro INT,
    FOREIGN KEY (id_dro) REFERENCES dro (id_dro) ON DELETE CASCADE
    )TYPE = InnoDB;
    besoin d'aide merci bcp bcp BCP

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Tu as quoi comme erreur ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut
    ben voila :
    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
     
    CREATE TABLE agence(
     
    id_agence INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    nom_agence VARCHAR( 25 ) NOT NULL ,
    trigramme VARCHAR( 3 ) NOT NULL ,
    adresse_rue_agence VARCHAR( 20 ) NOT NULL ,
    adresse_ville_agence VARCHAR( 20 ) NOT NULL ,
    adresse_cp_agence INT NOT NULL ,
    id_dro INT,
    FOREIGN KEY ( id_dro ) REFERENCES dro( id_dro ) ON DELETE CASCADE 
    ) TYPE = InnoDB 
     
    MySQL a répondu: 
     
    #1005 - Can't create table '.\soustraitant\agence.frm' (errno: 15

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    L'erreur me saute pas aux yeux, je sais pas ce qu'es l'erreur 15.

    Mais si tu n'as qu'une seule colonne sur ta FOREIGN KEY tu peux la mettre directement sur la colonne (avec REFERENCES) comme la PRIMARY KEY, ce qui donnerais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE agence (
    id_agence INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nom_agence VARCHAR(25)NOT NULL,
    trigramme VARCHAR(3)NOT NULL,
    adresse_rue_agence VARCHAR(20)NOT NULL,
    adresse_ville_agence VARCHAR(20) NOT NULL,
    adresse_cp_agence INT NOT NULL,
    id_dro INT REFERENCES dro (id_dro) ON DELETE CASCADE
    )TYPE = InnoDB;
    Essaye cette syntaxe

    Sinon dans ta table dro tu met le caractère ` pour le nom de table et les noms de colonnes alors que tu le met pas dans la table agence, je sais pas trop si ca peux causer problème

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut
    lol pas de message d'erreur alors maintenant il faut que je test si ca marche, merci

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut
    non ca ne marche pas pour car je créer un dro une agence avec le dro qui va bien et si je supprime le dro il me supprime pas mon agence et il me met aucun message d'erreur du style attention si vous supprimer cette ligne ou un truc comme ca donc ben c'est pas encor ca je vai tester un autre truc je revien
    merci

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut
    avec ca je pensse que c'est bon :
    pour ceux qui sont en galère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE parent (id INT NOT NULL,
                         PRIMARY KEY (id)
    ) ENGINE=INNODB;
    CREATE TABLE child (id INT, parent_id INT,
     
     
                     CONSTRAINT FK_Parent  FOREIGN KEY (parent_id) REFERENCES parent(id)
     
     
    ) ENGINE=INNODB;
    si tu sais comment vider le cache web en php je prend je sais que c'est pas le bon post mais bon je test, hihi

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Donc c'étais quoi l'erreur ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 159
    Points : 88
    Points
    88
    Par défaut

    ca marche po

    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
     
    CREATE TABLE agence(
     
    id_agence INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    nom_agence VARCHAR( 25 ) NOT NULL ,
    trigramme VARCHAR( 3 ) NOT NULL ,
    adresse_rue_agence VARCHAR( 20 ) NOT NULL ,
    adresse_ville_agence VARCHAR( 20 ) NOT NULL ,
    adresse_cp_agence INT NOT NULL ,
    id_dro INT,
    CONSTRAINT fk_dro FOREIGN KEY ( id_dro ) REFERENCES dro( id_dro ) 
    )ENGIN = InnoDB 
     
    MySQL a répondu: 
     
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ENGIN = InnoDB' at line 10

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Ca serait pas juste le point-virgule qui manque en fin de ta requête ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Et vire CONSTRAINT, je ne sais pas à quoi ca sert mais c'est pas nécessaire

Discussions similaires

  1. Problème de contrainte d'intégrité référentielle
    Par rillette87 dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/05/2011, 16h11
  2. Contraintes d'intégrité référentielle
    Par Jenesépa dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/02/2011, 16h39
  3. [8i] Contraintes d'intégrité référentielles
    Par apersonnat dans le forum Administration
    Réponses: 4
    Dernier message: 03/09/2010, 07h48
  4. Réponses: 10
    Dernier message: 24/09/2006, 14h08
  5. Réponses: 5
    Dernier message: 26/10/2005, 14h43

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