clé étrangère sur mysql - PHP - Programmation
Marsh Posté le 03-06-2004 à 09:29:15
une équi-jointure?
select t1.Champ1 FROM table t1, table2 t2 where t1.cleEtrangere = t2.cleEtrangere
c'est ça que tu cherchais?
Marsh Posté le 03-06-2004 à 09:32:04
rufo a écrit : une équi-jointure? |
Marsh Posté le 03-06-2004 à 09:34:31
ahh nan, je veux parler au moment de la création de la table (create)
l'interface montre ou cocher pour la clé primaire mais rien pr la clé etrangère.
je suis obligé de la faire à la main?
Marsh Posté le 03-06-2004 à 09:39:46
pas géré en mysql
Marsh Posté le 03-06-2004 à 09:40:41
oui je crois
cf la doc
ALTER TABLE yourtablename
ADD [CONSTRAINT symbol] FOREIGN KEY (...) REFERENCES anothertablename(...)
N'oubliez pas de commencer par créer vos index. En InnoDB versions inférieures à 3.23.50, ALTER TABLE ou CREATE INDEX ne doivent pas être utilisée avec les tables qui ont une clé étrangère, ou qui sont référencées dans une clé étrangère : toute commande ALTER TABLE supprime les contraintes de clé étrangère définie dans la table. Vous de devez pas utiliser la commande ALTER TABLE dans la table référencée non plus, mais utilisez plutôt DROP TABLE et CREATE TABLE pour modifier le schéma. Lorsque MySQL fait un ALTER TABLE il peut utiliser en interne la commande RENAME TABLE , et cela va poser un problème à la clé étrangère à laquelle la table se réfère. Une commande CREATE INDEX est traitée par MySQL comme une commande ALTER TABLE , et les mêmes restrictions s'appliquent.
Lorsqu'il fait des vérifications de clé étrangères, InnoDB pose des verrous de lignes sur les lignes filles et mères qu'il doit utiliser. InnoDB vérifie les contraintes immédiatement : la vérification n'est pas reportée à la validation de la transaction.
Marsh Posté le 03-06-2004 à 09:49:21
oki mai j'ai pas très bien compris, ce que je sais c'est que lors du create table il faut à la fin sur le champ étranger faire un references mai je sais plus comment faire.
oki je savais pas pr mysql ne générai pas les clés etrangères erff
Citation : code: |
Marsh Posté le 03-06-2004 à 09:56:29
Faudra gérer l'intégrité toi meme...
Marsh Posté le 03-06-2004 à 09:57:42
comment ??
je sais que ya un references à faire sur cette clé mais j'ai oublié la syntaxe
merci
Marsh Posté le 03-06-2004 à 10:22:41
non justement y'a pas ces mécanismes... ce que je voulais dire c'est que par exemple, lors de la suppression d'un engeristrement de la table etrangere, il faudra verifier que la clé etrangere n'est pas utilisée dans la table nuke_source, ou alors faires des suppressions en cascade
Marsh Posté le 03-06-2004 à 10:24:28
j'ai rien à faire ????? laisse comme tel !!!
ou je fais un references comme cela:
Citation : |
comme cela ?
Marsh Posté le 03-06-2004 à 10:41:53
boulax a écrit : non justement y'a pas ces mécanismes... ce que je voulais dire c'est que par exemple, lors de la suppression d'un engeristrement de la table etrangere, il faudra verifier que la clé etrangere n'est pas utilisée dans la table nuke_source, ou alors faires des suppressions en cascade |
En MyISAM, le type de table par défaut, l'intégrité référentielle (donc la gestion des clés étrangères) n'est pas gérée (de même que les transactions par exemple).
Cependant si le type de table est InnoDB aucun problème de gestion de clé étrangère et de transaction.
C'est une erreur commune de dire que MySQL ne gère pas les clés étrangères et les transactions alors qu'il les gèrent très bien.
Marsh Posté le 03-06-2004 à 10:47:15
j'ai pas compris tes termes:
MyISAM
InnoDB.
et essaye de répondre à ma question précèdente stp.
merci
Marsh Posté le 03-06-2004 à 11:13:29
Tedhi-tech a écrit : j'ai pas compris tes termes: |
En fait quand tu travaille avec MySQL tu peux choisir ton type de table (les tables que tu créees peuvent être en MyISAM, InnoDB, BerkeleyDB, HEAP...)
Si tu veux géré les clé étrangère au niveau de la base de données (et pas au niveau applicatif PHP), il faut que tes tables soient du type InnoDB.
Tu auras toutes les infos que tu souhaites sur cette page et sur les pages connexes : http://dev.mysql.com/doc/mysql/en/CREATE_TABLE.html
Marsh Posté le 04-06-2004 à 10:28:49
bonjour,
je voudrai relancer ce topic car j'ai essayé de créer ma table en prenant en compte ma clé étrangère mais mysql ne la raconnait pas !!!!
avec innoDB !!!
Code :
|
merci
peut-etre que c'est un problème de version de Mysql ??
j'ai la 3.23.49
Marsh Posté le 04-06-2004 à 10:40:21
c'est pas un problème de version. la table nuke_blocks existe-t-elle? quel est le message d'erreur?
Marsh Posté le 04-06-2004 à 10:47:48
en faites oui la table nuke_blocks existe deja et mais ne prend pas en compte la clé etrangère, quand je fait un pti test avec un script avec show !!
en commande mon create table apparait sans clé étrangère avec type=MyIsam !!
mais moi je veux en InnoDB !!
je crois que c'est la version car quand je regarde sur mon interface mysql en modif j'ai pas le choix InnoDB !!
Marsh Posté le 04-06-2004 à 11:40:23
ah oui, si InnoDB n'est pas activé, il créera tout de même la table... en MyISAM
faut que tu actives InnoDB dans my.ini avant d'aller plus loin (note qu'en MySQL 4.0, il est actif par défaut).
Marsh Posté le 04-06-2004 à 11:47:37
oki g trouvé !!!
Code :
|
j'ai cela ds le fichier je configure comment??
merci
Marsh Posté le 04-06-2004 à 11:54:09
google: activer innodb -> tuto de drasche
http://forum.hardware.fr/hardwaref [...] 2943-1.htm
Marsh Posté le 04-06-2004 à 13:30:42
dsl mais sa marche pas, je pense que c'est qui y arrive pa lol
??? deja le fichier est ds c:\windows et ensuite je suis la procédure comme indiquée je le met à la suite des infos deja existante en enlevant les dièses redemarre et tjrs pareil
???
Marsh Posté le 04-06-2004 à 13:46:09
bin maintenant il y a un message d'erreur et c'est:
erreur 1067: le processus s'est arrêté inopinément !!!!
Marsh Posté le 04-06-2004 à 14:44:26
boulax a écrit : google: activer innodb -> tuto de drasche |
ptain j'avais oublié que j'en parlais
Tedhi-tech> au cas où, tu dois créer les répertoires configurés pour InnoDB sinon MySQL ne démarrera pas.
Marsh Posté le 04-06-2004 à 14:48:07
en premier resultat la classe
Marsh Posté le 04-06-2004 à 14:54:40
euh t'as fait une recherche sur quoi?
Marsh Posté le 04-06-2004 à 14:58:19
je vais paraitre un peu con mais de quel repertoire parle tu dsl ??
Marsh Posté le 04-06-2004 à 15:02:29
dans le topic donné plus haut, je donne un exemple de configuration InnoDB. Il y a 3 répertoires distincts à configurer qui apparaissent dans cette config (sinon il y a les exemples de config que je mentionne également dans le topic)
Marsh Posté le 04-06-2004 à 15:07:18
Code :
|
tu parle de ces 3 là ?
Marsh Posté le 04-06-2004 à 15:27:07
drasche a écrit : euh t'as fait une recherche sur quoi? |
google -> activer innodb -> j'ai de la chance
Marsh Posté le 04-06-2004 à 15:31:24
oui je sais j'ai été voir mais sa marche pas
il me parle de vérifier ds fichiers à créer j'ai pas compris pk sa marche pas ??
Marsh Posté le 04-06-2004 à 15:31:39
Tedhi-tech a écrit :
|
oui. A la base, je n'oserais pas dire sur quoi ils pointent réellement (sans doute devraient-ils se trouver sous le répertoire data de MySQL (là où sont stockées tes bases de données actuelles, par exemple: c:\mysql\data). Perso je leur mettais des répertoires absolus, mais je ne m'en sers plus pour l'instant.
Marsh Posté le 04-06-2004 à 15:35:23
ah oki pr le permier repertoire je voit lekel c'est mais le reste
je sais pas je dois pointer où cela correspond à quoi?
sorry encore
Marsh Posté le 04-06-2004 à 15:37:06
si t'as mysql dans c:\mysql, ça sera genre:
c:\mysql\data\iblogs
c:\mysql\data\ibdata
(j'en suis pas plus sûr que ça hein, essaie, tu finiras bien par y arriver )
Marsh Posté le 04-06-2004 à 15:42:06
je crois que je vais devenir fous
est ce que tu sais à quoi ils correspondent par j'ai plein de repertoires !!
merci
Marsh Posté le 04-06-2004 à 15:44:30
j'y arrive plus non plus
faut que je réessaie, ça servirait au moins à compléter l'autre topic
Marsh Posté le 04-06-2004 à 16:19:28
j'ai trouver un truc qui peut nous aider
mais pour ma part je comprend pas trop lol
voici le lien: http://webdocs.math.univ-rennes1.f [...] start.html
il me reste 3/4 heure apres fini le boulot pourrai plus toucher mysql erff
Marsh Posté le 03-06-2004 à 09:23:22
bonjour,
je voudrai savoir comment on fait sur mysql, une requête ayant un clé étrangère.
Pourtant je sais comment c'est syntaxiquement mais avec l'interface mysql je sais pas.
merci