clé étrangère avec MySQL [RESOLU] - SQL/NoSQL - Programmation
Marsh Posté le 25-05-2005 à 14:09:31
Si je ne me trompe, par défaut, les tables créées sont de type MyISAM, qui ne tient aucunement compte des FK.
Marsh Posté le 25-05-2005 à 14:12:12
gizmo a écrit : Si je ne me trompe, par défaut, les tables créées sont de type MyISAM, qui ne tient aucunement compte des FK. |
"MyISAM".... ???
tu as dis "par défaut", il y a un moyen de modifier ça ???
Marsh Posté le 25-05-2005 à 14:13:53
J'ai jeté un coup dans phpmyadmin, et voilà ce que j'ai :
Moteur de stockage :
-------------------
MyISAM
MERGE
HEAP
MEMORY
BDB
InnoDB
ISAM
celui qui a l'air sélectionné chez moi est "BDB"...
Marsh Posté le 25-05-2005 à 14:19:35
gizmo a écrit : prend innoDB. |
ok... et comment on fait ???
quand je clique dessus, j'ai simplement des infos :
InnoDB
[ Variables | État InnoDB ]
InnoDB est disponible sur ce serveur MySQL.
Répertoire des données
Fichiers de données ibdata1:10M:autoextend
Taille de la mémoire-tampon 8 192 Ko
Marsh Posté le 25-05-2005 à 14:27:37
bon voilà, j'ai essayé et j'ai tjr le meme problème
une idée ??
Marsh Posté le 25-05-2005 à 14:31:11
pour chaque table, je suis allé dans 'Opérations' et j'ai sélectionné 'InnoDB' dans 'Type de table'... c'est bien comme ça qu'il faut faire non ?
Marsh Posté le 25-05-2005 à 14:33:14
andlio a écrit : pour chaque table, je suis allé dans 'Opérations' et j'ai sélectionné 'InnoDB' dans 'Type de table'... c'est bien comme ça qu'il faut faire non ? |
Oui mais même si le type n'était pas réellement disponible, il ne te renverrait pas d'erreur. Donc repasse dans la définition de ta table pour t'assurer qu'elle est bien en InnoDB
Marsh Posté le 26-05-2005 à 08:38:32
drasche a écrit : Oui mais même si le type n'était pas réellement disponible, il ne te renverrait pas d'erreur. Donc repasse dans la définition de ta table pour t'assurer qu'elle est bien en InnoDB |
ca y est, je suis passé en InnoDB... mais ca change rien
Marsh Posté le 27-05-2005 à 14:51:11
Code :
|
voilà ce que je lance comme requête, et voilà ce que MySQL me sort comme erreur :
#1005 - Can't create table './test/t2.frm' (errno: 150) |
la table t1 est correctement créée. l'erreur vient de la ligne 11 (puisque quand je fais la mm requête en la supprimant ça marche correctement).
j'ai vraiment besoins d'aide là... je ne vois vraiment pas comment faire...
Marsh Posté le 27-05-2005 à 15:43:19
Il me semble qu'il te faut un index sur chaque champ déclaré comme clé étrangère.
Marsh Posté le 27-05-2005 à 16:21:11
drasche a écrit : Il me semble qu'il te faut un index sur chaque champ déclaré comme clé étrangère. |
comment fait-ton pour définir un index avec MySQL ?
gizmo a écrit : c'est pas un index qu'il faut, c'est l'unicité |
Marsh Posté le 27-05-2005 à 16:35:39
j'ai fais ça :
Code :
|
ça marche maintenant
merci je commençais à devenir fou
au fait c'est bien ça ou c'est un coup de chance ???
Marsh Posté le 27-05-2005 à 19:00:49
c'est bon parce que les clef primaires sont uniques par definition.
Marsh Posté le 30-05-2005 à 10:08:12
il y a qd même un problème : pourquoi sommes-nous obligé de définir la clé étrangère comme étant unique !!??
dans mon cas, j'ai 2 tables : 'station' et 'OS'.
chaque station référencées dans la table 'station' possède un OS référencé dans la table 'OS'. Mais plusieurs stations peuvent avoir le même OS.
cependant, si on met la clé primaire en 'UNIQUE', c'est impossible !
comment faire alors ?
Marsh Posté le 30-05-2005 à 10:30:43
C'est bon c'est résolu...
il falait simplement les définir en tant qu'index et non en tant qu'unique... comme vous me l'avez dit avant
merci
Marsh Posté le 11-07-2005 à 13:15:10
bonjour,
J'aimerais egalement utiliser lesclé etrangère ss mysql mais le pb c'et que je trouve pas le type innodb...
quelqu'un aurait il une idee?
merci bcp
Marsh Posté le 18-07-2005 à 10:56:32
kmi_67 a écrit : en fait j'utilise mysql version 4.0.15 |
"(...) Les tables InnoDB sont inclues dans la distribution source de MySQL depuis la version 3.23.34a (...)"
donc le pb ne vient pas de là
http://www.manuelphp.com/mysql/innodb-overview.php
http://dev.mysql.com/doc/mysql/en/ [...] aints.html
essaye d'aller jeter un oeil sur ces sites, peut-être que ça t'apportera plus d'infos
Marsh Posté le 25-05-2005 à 13:58:05
bonjour à tous !
j'ai créé une base de données sous MySQL 4.0.20.
elle a 3 tables : 'station' qui contient l'@ IP des stations de travail à tester sur le réseau, 'alerte' qui contient un historique de ttes les alertes reçues par les stations, et correspondance_OID qui contient le type d'alerte susceptibles d'être reçu.
j'ai bien défini les clé étrangères, mais celles-ci ne semble pas fonctionnées correctement.
en effet, lorsque je fais l'insertion suivante dans la table 'station' :
+--------------+------+--------+-----+-----+
|IP |HOST |OS |PING |SNMP |
+--------------+------+--------+-----+-----+
|123.456.789.1 |NULL |Windows |NULL |NULL |
+--------------+------+--------+-----+-----+
et cette insertion dans la table 'alerte' :
+--------------+------+--------+
|IP |ID |Date |
+--------------+------+--------+
|456.789.012.1 |1 |25/0505 |
+--------------+------+--------+
il n'y a aucune erreur et les tuples s'insèrent normalement alors que les valeurs ne correspondent pas. Portant j'ai défini une clé primaire entre l'attribut IP de alerte et celui de station.
voici le script de création des tables :
Message édité par andlio le 30-05-2005 à 10:31:47