Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
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/12/2010, 12h19   #1
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Par défaut Intégrité référentielle dans Mysql

Bonjour

L'intégrité dans MySql est-elle par défaut en place ?
A un moment, j'ai eu un message qui me disait que j'avais un souci de relations entre mes tables et qu'il fallait modifier un paramètre quelque part.

Je n'arrive d'ailleurs plus à réafficher ce message ?

Question : comment vérifier cette notion d'intégrité dans MySql ?
Si non activée, comment faire ?
Si pas possible, comment gérer les mises en cascade ?
Je n'imagine pas de devoir supprimer les enregistrements des tables connexes et remonter jusqu'à la table de départ....

Mais je suis sur qu'il existe une solution

Merci à vous pour votre aide.
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 12h21   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Il faut utiliser le moteur InnoDB pour les tables (par défaut dans la dernière version de MySQL mais c'était MyISAM avant).
Dès lors les créations de clés étrangères avec ON DELETE CASCADE | RESTRICT seront opérationnelles.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 12h29   #3
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par CinePhil Voir le message
Il faut utiliser le moteur InnoDB pour les tables (par défaut dans la dernière version de MySQL mais c'était MyISAM avant).
Dès lors les créations de clés étrangères avec ON DELETE CASCADE | RESTRICT seront opérationnelles.
Merci à nouveau
Dans l'onglet moteurs, je vois bien InnoDB, cela veut-il dire qu'il est activé ?
Si non, comment faire pour qu'il le soit ?
Dois-je intervenir dans un fichier de config ?
Si oui, lequel ?

D'ailleurs je vois un lien Etat Inno, je clique dessus mais rien n'est écrit...

Désolé pour toutes ces questions
Mais je démarre dans cet environnement.

Edit : je vois écrit : InnoDB est disponible sur ce serveur MySQL.
malgré tout sur ma page d'accueil de phpmyadmin je vois toujours écrit :
Certaines fonctionnalités ayant trait aux tables reliées sont désactivées. Pour une analyse du problème, cliquez ici.

Quand je clique sur ici, s'affiche une page qui liste des erreurs.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
$cfg['Servers'][$i]['pmadb'] ...	en erreur [ Documentation ]
$cfg['Servers'][$i]['relation'] ...	en erreur [ Documentation ]
Fonctions relationnelles: désactivé
 
$cfg['Servers'][$i]['table_info'] ...	en erreur [ Documentation ]
Affichage infobulle: désactivé
 
$cfg['Servers'][$i]['table_coords'] ...	en erreur [ Documentation ]
$cfg['Servers'][$i]['pdf_pages'] ...	en erreur [ Documentation ]
Génération de schémas en PDF: désactivé
 
$cfg['Servers'][$i]['column_info'] ...	en erreur [ Documentation ]
Commentaires de colonnes: désactivé
Requêtes en signets: désactivé
Transformation: désactivé
 
$cfg['Servers'][$i]['history'] ...	en erreur [ Documentation ]
Historique SQL: désactivé
 
$cfg['Servers'][$i]['designer_coords'] ...	en erreur [ Documentation ]
Concepteur: désactivé
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 12h49   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Puisque tu utilises phpMyAdmin, sélectionne ta BDD et regarde la colonne Type pour chaque table.

Si tu vois écrit "InnoDB" c'est que tes tables ont été créées pour utiliser ce moteur. Si tu vois MyISAM, les tables ne pourront pas utiliser les clés étrangères. Il faut alors modifier chaque table en changeant le moteur dans l'onglet "Opérations".

Ensuite, quand tu affiches la structure de la table, si celle-ci utilise le moteur InnoDB, tu vois apparaître un lien "Gestion des relations" sous la liste des colonnes (que phpMyAdmin appelle improprement "champs" ! ). En cliquant sur ce lien, tu accède au paramétrage des clés étrangères avec leur options ON DELETE.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 13h05   #5
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Super !!!!!!

J'ai trouvé sur la base de tes infos

juste un point de précision : Si j'ai une table series avec un champ serie_id (PK) et une autre table saisons avec le même champ serie_id (FK) je dois bien aller dans cette table saisons pour faire le lien et pas l'inverse manifestement ?

Merci encore
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 13h09   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par iviewclear Voir le message
juste un point de précision : Si j'ai une table series avec un champ serie_id (PK) et une autre table saisons avec le même champ serie_id (FK) je dois bien aller dans cette table saisons pour faire le lien et pas l'inverse manifestement ?
Oui. Il faut paramétrer la clé étrangère dans la table où elle se trouve, pas dans la table de référence.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 13h37   #7
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Encore merci

Dernier point je pense avec mon cas concret

J'ai 3 tables et on va faire simple

table series
champs :
serie_id INT
index PK sur serie_id
exemple
1

table saisons
champs :
serie_id INT
saison_id INT
index sur 2 champs serie_id et saison_id
exemple :
1 1
1 2 etc..

table episodes
champs :
serie_id INT
saison_id INT
episode_id
index sur 3 champs serie_id et saison_id et episode_id
exemple :
1 1 1
1 1 2
1 2 1
1 2 2 etc...

Mon souci :
dans les relations que je souhaite pour cette table épisode en face du champ saison_id il ne me propose pas l'équivalent de la table saison soit saison_id
Voir la pièce jointe pour illustration

Aurez-tu une idée lumineuse du pourquoi car pour tout le reste pas de souci particulier ?

Merci
Images attachées
Type de fichier : jpg Image1.jpg (99,2 Ko, 3 affichages)
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 14h49   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
C'est parce que quand tu as un index multi-colonnes, seule la première colonne est indexée individuellement.

Dans l'absolu, tu peux très bien avoir ceci :
1 1
1 5
1 12
2 2
2 3
2 8
Et tu vois bien que la première colonne est bien dans l'ordre mais pas la deuxième.
Il faut donc indexer individuellement la colonne saison_id pour que celle-ci puisse servir de clé étrangère.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h27   #9
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Par défaut Ben tiens c'est nouveau ça !!!

Depuis tout à l'heure impossible de démarrer PhpMyAdmin, j'ai ce message :

Erreur lors du démarrage de la session, veuillez vérifier les erreurs indiquées par PHP ou dans le fichier témoin du serveur web, et configurer PHP correctement.

alors que je n'ai rien fais d'autre entre une demande et une autre

D'où cela peut-il venir ?
Si je veux aller dans mes bases que dois-je vérifier ?

Cela m'éviterait de réinstaller WampServer, seule solution pour le moment que j'ai trouvé pour revenir à la normale

Merci

Edit : je viens de réinstaller Wamp et toujours pareil !!!!!!
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 11h33   #10
Nouveau Membre du Club
 
Inscription : novembre 2003
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 42
Points : 36
Points : 36
Pour le démarrage de PHPMyAdmin,
ça m'arrive de temps en temps avec la version 3.3.5,
donc je garde toujours une ancienne version (3.0.0) à porté de main (et configurée de la même façon).
Perso, ça me gave ces gestions de session, alors que je suis sur MON PC...


Pour comprendre les liaisons inter-tables, et les afficher graphiquement,
je te conseilles un outil libre : http://ondras.zarovi.cz/sql/
Une fois installé, tu choisis d'importer une base de données,
si INNODB et contraintes d'intégrité, tu auras automatiquement les liaisons inter-tables.
(voir la démo : http://ondras.zarovi.cz/sql/demo/?keyword=default&)


PK : Primary key
FK : Foreign Key
apophyss 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 15h35.


 
 
 
 
Partenaires

Hébergement Web