begin process at 2012 05 26 18:35:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Divers

 > 

Gérer les clés étrangères avec Mysql


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gérer les clés étrangères avec Mysql

dimanche 18 octobre 2009 à 21:04:53 | Gérer les clés étrangères avec Mysql

wider01

http://php-dream.com/fre/portions/portion004c.html?id=114


Mysql est capable de gérer les contraintes de clés étrangères[1]. Une fonction qui évite la gestion des correspondance par du code (php, c...).
Imaginons deux tables, familles et professions. Nous avons comme contraintes qu'une famille peut avoir plusieurs professions et qu'une professions peut avoir plusieurs famille, ce qui donne des cardinalitées 1,N de chaque côté. Pour ceux qui ont suivit les cours de développement pendant leurs BTS ;-) lorsque vous allez réaliser le MCD vous aurez deux entités (familles, professions) et une associations (prof_fam) qui va contenir les clés primaires des entités familles et professions. Voila pour la partie théorique.

Maintenant le code sql :

CREATE TABLE familles (
nom_fam VARCHAR(3) NOT NULL PRIMARY KEY,
designation VARCHAR(30) NULL,
code VARCHAR(3) NULL
) TYPE = InnoDB;

CREATE TABLE professions (
nom_prof VARCHAR(10) NOT NULL PRIMARY KEY
) TYPE = InnoDB;

CREATE TABLE prof_fam (
nom_fam VARCHAR(3) NOT NULL,
nom_prof VARCHAR(10) NOT NULL,
PRIMARY KEY(nom_fam,nom_prof),
FOREIGN KEY(nom_fam) REFERENCES familles(nom_fam) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(nom_prof) REFERENCES professions(nom_prof) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX(nom_fam),
INDEX(nom_prof)
) TYPE = InnoDB;


Attention l'ordre de création est important, d'abord les entités qui ne comporte pas de clés étrangères, ensuite les associations. Vous remarquez qu'il faut utiliser le format InnoDB[2]. Les lignes qui nous intéresses sont les FOREIGN KEY, c'est grâce à cette commande que nous indiquons à Mysql avec quelle entités les données présentes dans prof_fam sont liées. Pour plus d'informations sur la syntaxe aller faire un tour dans la documentation de mysql[3].

Le code PHP. Maintenant que nos tables sont créés nous pouvons les remplir, vous avez le choix, à la main ou alors grâce à des imports. J'ai choisi la deuxième option. Je ne vous donnerais pas le code complet, ce n'est pas le but de cette article mais juste la partie qui concerne l'erreur "a foreign key constraint fails" généré lorsque vous essayé de remplir en masse la table prof_fam. Il existe une commande SQL pour désactiver temporairement la gestion des clés étrangères : SET FOREIGN_KEY_CHECKS = 0

<?php
// Suppression temporaire de la gestion des clés étrangères
connecte();
$req = "SET FOREIGN_KEY_CHECKS = 0";
$result = mysql_query($req) or die('Erreur SQL !'.$sql.''.mysql_error());
foreach($columns_profam as $cle => $val)
{
$req = "INSERT INTO prof_fam(nom_fam, nom_prof) VALUES('$nom_fam', '$num_prof')";
$result = mysql_query($req) or die('Erreur SQL !'.$sql.''.mysql_error());
}

// activation de la gestion des clés étrangères.
$req = "SET FOREIGN_KEY_CHECKS = 1";
$result = mysql_query($req) or die('Erreur SQL !'.$sql.''.mysql_error());
?>


Cette discussion est classée dans : mysql, key, clés, prof, fam


Répondre à ce message

Sujets en rapport avec ce message

Foreign Key sous MySql [ par MadM@tt ] Bonjour à tous,Je travaille avec DBDesigner (mais c'est peu important pour la suite). Je viens de réaliser que les clés étrangères n'était pas possibl erreur de syntaxe mysql [ par pimpa4real ] Bonjour à tous,Voila je suis en train de créer une nouvelle base de données sous MySQL 5 et j'ai sans doute un problême de syntaxe....Si quelqu'un pou Probleme mysql error in your SQL syntax; [ par smile88 ] Bonjour, jai un probleme mysql quand jenvoi lé requete a ma base il m'affiche ce message d'erreur: You have an error in your SQL syntax; check the m MySQL : insertion dans table avec clés étrangères [ par chatmi91 ] Bonjour, Voilà j'ai créée une BD avec AnalyseSI que j'ai ensuite importé sous MySQL, jusque là no problem [^^happy13] . Il y a plusieurs tables avec connexion mysql netbeans [ par sbex ] salut! j'ai crée une base de données sur Mysql(phpMyadmine) qui contient une table"client(nom,mot de passe)"et j ai fait un interface graphique avec DUMP dans un fichier bat msql [ par nader1987 ] J'utilise des fichiers .txt où je stocke dans " D:\Mysql\testnader.txt ", lorce que je lance la commande suivante mysql -u root -p NADER -e "source Mysql + MAJ automatique du nombre de jours de congé d'un employé [ par hichamaouraghe ] Bonjour, je suis en train de développer une application qui gére les demandes de congés sous php/Mysql et j'ai eu un problème qui consiste a comment f creation d'un evenement sous mysql [ par hichamaouraghe ] j'ai essayer de tester un petit exemple qui consiste a ajouter un enregistrement 'nom' dans la table personne chaque 8secondes CREATE EVENT test ON SC Problème pour configurer MySQL sous Easy Php [ par ALouvet ] Bonjour, J'ai installé Easy PHP 5.3.9 et installé mon site WordPress dans un dossier sous "www". Pour le moment, pas de problème, il apparait ensuite Duplicate entry '0-0' for key 'PRIMARY' [ par smile88 ] bonsoir, quand je veux inserer dé donnée dans ma base il maffiche ce msg "[color=red]Duplicate entry '0-0' for key 'PRIMARY'[/color]" voici mon code


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,666 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales