clé étrangère sur mysql

clé étrangère sur mysql - PHP - Programmation

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

Reply

Marsh Posté le 03-06-2004 à 09:23:22   

Reply

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?

Reply

Marsh Posté le 03-06-2004 à 09:32:04    

rufo a écrit :

une équi-jointure?
select t1.Champ1 FROM table t1, table2 t2 where t1.cleEtrangere = t2.clePrimaire
 
c'est ça que tu cherchais?


[:aloy]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

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? :??:

Reply

Marsh Posté le 03-06-2004 à 09:39:46    

pas géré en mysql :o


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

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.


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

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 :o  

Citation :

code:
CREATE TABLE `nuke_source` (
`lid` INT( 50 ) NOT NULL AUTO_INCREMENT,
`localisation` INT( 1 ) DEFAULT '0' NOT NULL ,
`nom_base` VARCHAR( 50 ) NOT NULL ,
`user_conn` VARCHAR( 50 ) NOT NULL ,
`pwd_user` VARCHAR( 50 ) NOT NULL ,
`bid` INT( 10 ) NOT NULL ,  // la clé etrangère est là !
PRIMARY KEY ( `lid` )  
);

 

Reply

Marsh Posté le 03-06-2004 à 09:56:29    

Faudra gérer l'intégrité toi meme...


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

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 :fou:  
merci

Reply

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


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 03-06-2004 à 10:22:41   

Reply

Marsh Posté le 03-06-2004 à 10:24:28    

j'ai rien à faire ????? laisse comme tel !!!
ou je fais un references comme cela:

Citation :


REFERENCES nuke_blocks(`bid`) INT( 10 ) NOT NULL ,


comme cela ? :pt1cable:  

Reply

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.

Reply

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 :jap:

Reply

Marsh Posté le 03-06-2004 à 11:13:29    

Tedhi-tech a écrit :

j'ai pas compris tes termes:
MyISAM
InnoDB.
et essaye de répondre à ma question précèdente stp.
merci :jap:


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

Reply

Marsh Posté le 03-06-2004 à 11:15:55    

oki merci beaucoup  :)

Reply

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 :
  1. CREATE TABLE nuke_source (
  2. lid INT( 50 ) NOT NULL AUTO_INCREMENT,
  3. localisation INT( 1 ) DEFAULT 0 NOT NULL ,
  4. nom_base VARCHAR( 50 ) NOT NULL ,
  5. user_conn VARCHAR( 50 ) NOT NULL ,
  6. pwd_user VARCHAR( 50 ) NOT NULL ,
  7. bid  INT( 10 ) NOT NULL ,
  8. FOREIGN KEY (bid) REFERENCES nuke_blocks(bid),
  9. PRIMARY KEY ( lid)
  10. ) TYPE=INNODB;


merci
peut-etre que c'est un problème de version de Mysql ??
j'ai la 3.23.49  :heink:

Reply

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?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 !!

Reply

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 [:joce]
 
faut que tu actives InnoDB dans my.ini avant d'aller plus loin [:spamafote] (note qu'en MySQL 4.0, il est actif par défaut).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 11:44:34    

je trouve pas ce fichier !!!  :pfff:  :??:

Reply

Marsh Posté le 04-06-2004 à 11:47:37    

oki g trouvé !!!

Code :
  1. #This File was made using the WinMySQLAdmin 1.4 Tool
  2. #18/05/2004 10:24:36
  3. #Uncomment or Add only the keys that you know how works.
  4. #Read the MySQL Manual for instructions
  5. [mysqld]
  6. basedir=D:/Mgappext/intranetdgaosi/mysql-3.23.49
  7. #bind-address=172.16.10.39
  8. datadir=D:/Mgappext/intranetdgaosi/mysql-3.23.49/data
  9. #language=D:/Mgappext/intranetdgaosi/mysql-3.23.49/share/your language directory
  10. #slow query log#=
  11. #tmpdir#=
  12. #port=3306
  13. #set-variable=key_buffer=16M
  14. [WinMySQLadmin]
  15. Server=D:/Mgappext/intranetdgaosi/mysql-3.23.49/bin/mysqld-nt.exe


j'ai cela ds le fichier je configure comment??
merci

Reply

Marsh Posté le 04-06-2004 à 11:54:09    

google: activer innodb -> tuto de drasche  :D  
 
http://forum.hardware.fr/hardwaref [...] 2943-1.htm


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 04-06-2004 à 11:55:31    

oki merci !!!!  :)

Reply

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 :o  
???

Reply

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 !!!!

Reply

Marsh Posté le 04-06-2004 à 14:44:26    

boulax a écrit :

google: activer innodb -> tuto de drasche  :D  
 
http://forum.hardware.fr/hardwaref [...] 2943-1.htm


ptain j'avais oublié que j'en parlais [:ddr555]
 
Tedhi-tech> au cas où, tu dois créer les répertoires configurés pour InnoDB sinon MySQL ne démarrera pas.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 14:48:07    

en premier resultat la classe [:must]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 04-06-2004 à 14:54:40    

euh t'as fait une recherche sur quoi? [:yoko54]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 14:58:19    

je vais paraitre un peu con mais de quel repertoire parle tu dsl ??  :sweat:

Reply

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)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 15:07:18    

Code :
  1. innodb_data_home_dir = c:ibdata
  2.   innodb_log_group_home_dir = c:iblogs
  3.   innodb_log_arch_dir = c:iblogs


tu parle de ces 3 là ?

Reply

Marsh Posté le 04-06-2004 à 15:27:07    

drasche a écrit :

euh t'as fait une recherche sur quoi? [:yoko54]


 
google -> activer innodb -> j'ai de la chance [:itm]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

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 ??

Reply

Marsh Posté le 04-06-2004 à 15:31:39    

Tedhi-tech a écrit :

Code :
  1. innodb_data_home_dir = c:ibdata
  2.   innodb_log_group_home_dir = c:iblogs
  3.   innodb_log_arch_dir = c:iblogs


tu parle de ces 3 là ?


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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 :pt1cable:

Reply

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 :D)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 15:42:06    

je crois que je vais devenir fous  :pt1cable:  :pt1cable:  :o  
est ce que tu sais à quoi ils correspondent par j'ai plein de repertoires !! :pfff:  
merci :jap:

Reply

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 :/


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 04-06-2004 à 15:46:25    

ouai merci c'est cool !!  :jap:

Reply

Marsh Posté le 04-06-2004 à 16:19:28    

j'ai trouver un truc qui peut nous aider  :love:  
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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed