Rechercher : dans
Par :

Gestions des relations InnoDB MySQL

Dernière réponse le 12 mai 2009 à 20:10:20 lauraM, le 26 jun 2008 à 16:41:56 
 Signaler ce message aux modérateurs

Bonjour,
Bon je suis perdue et je souhaiterais que l'on m'aide à éclaircir quelques points.
Voilà j'ai donc une base données avec des tables. Mon but est de relier une clé étrangère à sa clé primaire.
J'ai fait des recherches et j'ai compris qu'il fallait mettre mon moteur de table en InnoDB.
Ensuite le point sur lequel je suis perdue c'est la gestion des relations ce qui je pense me permettrait d'atteindre mon précédemment définit.
Que dois-je utiliser pour que quand je supprime un enregistrement la clé étrangères soit de valeur null?
Actuellement quand j'essai de la faire j'ai une erreur comme moi je n'est pas de clé définit.
Bref j'y comprend rien du tout.
Pouvez-vous m'aider svp ???? Laura

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Gestions des relations InnoDB MySQL » dans :
Customer RelationShip Management (CRM) - Gestion de la relation Voir Introduction à la gestion de la relation client Le client est généralement la principale source de revenus pour les entreprises. Or, avec le changement de l'économie dû notamment à l'intégration des nouvelles technologies dans les relations client...
Choisir un logiciel de gestion de la relation client (CRM) VoirChoisir un logiciel de gestion de la relation client (CRM) A l’ère d’internet, Il est primordial de comprendre les attentes et les besoins de vos clients. Surtout si vous misez sur la toile pour développer votre activité. Un client insatisfait peut...
Gestionnaire de périphériques VoirCet article a pour but de vous aider à manipuler le gestionnaire des périphériques... :-) Vous pouvez utiliser le Gestionnaire de périphériques pour mettre à jour les pilotes (ou les logiciels) des périphériques matériels, modifier les paramètres...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Supplier Relationship Management (SRM) VoirSupplier Relationship Management Le terme « Supplier Relationship Management » (noté SRM), traduisez « gestion de la relation fournisseur » désigne l'utilisation de technologies par une entreprise afin d'améliorer le mécanisme d'approvisionnement...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
MySQL - Installation sous Windows VoirPrésentation de MySQL MySQL est un Système de Gestion de Bases de Données (SGBD) fonctionnant sous Linux et Windows. Depuis la version 3.23.19, MySQL est sous Licence GPL (aussi bien sous Linux que Windows), ce qui signifie qu'il peut être utilisé...

1

Nagra, le 26 jun 2008 à 17:42:14

Voilà un exemple de tables faisant une référence:


DROP TABLE IF EXISTS `maTable`;
CREATE TABLE `maTable` (
`Nom` varchar(45) NOT NULL,
`Prenom` varchar(45) NOT NULL,
PRIMARY KEY (`Nom`,`Prenom`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



DROP TABLE IF EXISTS `monAutreTable`;
CREATE TABLE `monAutreTable` (
`Nom` varchar(45) NOT NULL,
`Prenom` varchar(45) NOT NULL,
`Adresse` varchar(150) default NULL,
PRIMARY KEY (`Nom`,`Prenom`),
FOREIGN KEY (`Nom`, `Prenom`) REFERENCES `maTable` (`Nom`, `Prenom`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Voilà. C'est un exemple. Pour mettre la valeur à NULL. Il faut que tu rajoutes la clause "ON DELETE SET NULL" (il me semble que c'est ça ou en tous cas ça s'en rapproche) à ta contrainte de clef étrangère. En gros, écrire ça:

FOREIGN KEY (`Nom`, `Prenom`) REFERENCES `maTable` (`Nom`, `Prenom`) ON DELETE SET NULL


Voilà, j'espère que ça pourra t'aider ;)

Répondre à Nagra

2

lauraM, le 26 jun 2008 à 17:54:51

Bonjour,
merci de ton aide précieuse.
Moi j'ai mis mes tables en InnoDB à la main dans mysql c'est-à-dire que il y a un onglet opérations quand je suis sur ma table, je vais dessus et je change le moteur de la table.
Donc pour ce point là c'est ok.
Ensuite j'ai essayé de faire comme tu m'as dit :

alter table intervention
add constraint fk_intervention_demandeclient foreign key (`IdDemande`)
references demandeclient(`IdDemande`)

Et malheureusement mysql en veut pas et je ne sais pas pourquoi.
Quand tu es dans l'onglet 'structure' de ta table tu as en dessous de tout tes champs un lien qui s'appelle "gestion des relations" et dedans il propose même de mettre une relation à la clé.
Est-ce que c'est ca qu'il faut que je fasse et si oui pouvez-vous m'expliquer.
MERCI :-)))) Laura

Répondre à lauraM

3

Nagra, le 26 jun 2008 à 18:00:29

MySQL n'a pas d'interface graphique en tant que tel, c'est de la ligne de commande. Tu utilises quoi comme client graphique? phpMyAdmin? MySQLAdministrator?

J'avoue pour ma part ne jamais utiliser les clients graphiques pour la création des tables justement parce que c'est le bordel avec les clés, les index, les contraintes, etc... Donc je risque de ne pas trop pouvoir t'aider là dessus... ^^

Pour ton erreur, mysql te renvoi quoi comme phrase et/ou numéro d'erreur?

Répondre à Nagra

4

lauraM, le 26 jun 2008 à 18:08:08

Alors déjà j'utilise phpadmin mais je peux tout codé dessus pour ca il n'y a pas de souci.

Quand je tape la requête moi même l'erreur est :

#1005 - Ne peut créer la table '.\ficheintervention\#sql-40c_15f.frm' (Errcode: 150)

Et quand je le fais avec les options de php admin cela donne :

Cannot add or update a child row: a foreign key constraint fails...

Voilà en fait j'ai vu un POSt où la personne avait le même problème que moi mais il n'a pas été résolu.
Voici le lien :

http://www.commentcamarche.net/forum/affich 4016692 les cles etrangeres avec mysql?Acces=1

Votre aide à tous est hyper importante. (projet de stage) Laura

Répondre à lauraM

5

Nagra, le 26 jun 2008 à 18:23:57

Foutue erreur 1005, moi aussi je me prend la tête avec dans un autre topic. Vive les stages -__-

Bon, pour le coup, t'as pas l'air d'avoir le même cas que moi donc je peux ptet t'aider...

Tu peux mettre le script de création de tes deux tables où tu cherches à faire la jointure?

Si IdDemande n'est pas clé primaire de la table intervention (seulement secondaire quoi) il faut que tu rajoutes un Index dans la table intervention sur le champs idDemande.

Sinon vérifie bien que le types des champs sur lesquels tu veux mettre la contrainte de clé étrangère sont bien les même dans les deux tables (que tu n'ai pas un INT d'un coté et un UNSIGNED INT de l'autre par exemple).

C'est tout ce que je peux te dire pour le moment. D'autant plus que je suis loin d'être expert puisque j'ai moi même un problème similaire et j'attends une réponse sur un autre topic ^^ Et désolé, je ne pense pas que je pourrais répondre avant demain maintenant.

Bonne soirée et bon courage ++

Répondre à Nagra

6

lauraM, le 27 jun 2008 à 09:34:00

Bonjour,
merci pour tes conseils.
Désolé je viens de relire le POST que j'ai mis en lien précédemment et j'annule ce que j'ai dis je ne pas sont problème mais une erreur du genre.
En fait j'ai bien mes clefs secondaire d'indexé, j'ai pu le faire avec une requête mais lorsque je veux rajouter on delete set null ou on update set null c'est là que ca coince et que mysql me lance une erreur comme quoi je ne peux pas faire ca car aucunes clés n'est définit.
Qu'est ce qu'il appel définit?
Moi ce que je pensait c'est qu'il fallait d'abord dire au clé primaire si elle agiissait en cascade, no action ou autres et ensuite faire la même chose pour les clés secondaires.
Qu'en pensez vous???
MERCI Laura

Répondre à lauraM

7

lauraM, le 27 jun 2008 à 09:35:04

Et je rajoute par la même occasion que j'ai bien vérifié les types de mes champs. Laura

Répondre à lauraM

8

lauraM, le 27 jun 2008 à 09:56:52

Bonjour,
De plus quand je veux créer la clé primaire c'est-à-dire sans lui definir les relation j'ai une erreur telle que :

requête SQL:

ALTER TABLE intervention ADD CONSTRAINT fk_intervention_demandeclient FOREIGN KEY ( `IdDemande` ) REFERENCES demandeclient( `IdDemande` )

MySQL a répondu:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`ficheinterv/#sql-d50_42`, CONSTRAINT `fk_intervention_demandeclient` FOREIGN KEY (`IdDemande`) REFERENCES `demandeclient` (`IdDemande`))

Ca m'énerve lol! Laura

Répondre à lauraM

9

lauraM, le 27 jun 2008 à 10:12:48

Mon gros souci c'est l'erreur précédente :

#1452 - Cannot add or update a child row: a foreign key constraint fails (`ficheinterv/#sql-d50_42`, CONSTRAINT `fk_intervention_demandeclient` FOREIGN KEY (`IdDemande`) REFERENCES `demandeclient` (`IdDemande`))

Je ne sais pas pourquoi pouvez-vous m'aider svp ???? Laura

Répondre à lauraM

10

lauraM, le 27 jun 2008 à 11:12:27

HELP HELP HELP Laura

Répondre à lauraM

11

 Sakreho, le 12 mai 2009 à 20:10:20
  • +2

Exemple : Vous avez fais un système de tutoriel. Il y a une table 'membres' avec une clé primaire 'id' et une table 'tutos' avec une clé étrangère 'id_membre'. Vous voudriez que lorsque le membre se désinscrit, le champ 'id_membre' devienne NULL.
Commencez par changer le moteur de BDD en mettant InnoBD (en bas de la page structure). Puis choisissez 'id' comme clé primaire et 'id_membre' comme externe (les boutons à droites dans le tableau structure).
Puis modifiez les deux champs et cochez la case NULL et revenez à la page structure de la table tutos. Cliquez sur le lien 'Gestion des relations'. Après 'id_membre' sélectionnez 'membres.id' et après 'ON DELETE' sélectionnez 'SET NULL'.
Validez le tout et testez : lorsque vous supprimé un membre tous ses tutos ont un 'id_membre' valent NULL !

PS : Tout ça c'est avec PHPMyAdmin

Répondre à Sakreho