Aide pour les relations entre tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Aide pour les relations entre tables

par orgerix » 23 mai 2007, 18:05

Bon, ca ne sert à rien, j'ai pas le droit d'utiliser des TRIGGER :cry: ...

par orgerix » 21 mai 2007, 12:45

J'avais bien essayé de dire quelque chose comme cela, mais bon, j'ai du me tromper dans la syntaxe, et puis à 11h, ca aide pas trop à réfléchir :lol:

par Hubert Roksor » 20 mai 2007, 23:52

Je ne sais pas ce que tu as lu, mais je viens d'essayer et ça a marché comme prévu et du premier coup. Je te poste ce que j'ai utilisé. Si tu n'es pas sûr de toi, relis le manuel, il est relativement clair à ce sujet.

Ah, un dernier conseil, essaie toujours avant de dire que quelque chose ne marche pas. Et si ça ne marche pas, poste ce qui ne marche pas.

Code : Tout sélectionner

CREATE TABLE t1 ( t1_id smallint(5) unsigned NOT NULL auto_increment, PRIMARY KEY (t1_id) ); INSERT INTO t1 VALUES (1),(2),(3),(4); CREATE TABLE t2 ( t2_id smallint(5) unsigned NOT NULL auto_increment, t1_id smallint(5) unsigned NOT NULL, PRIMARY KEY (t2_id), KEY t1_id (t1_id) ); INSERT INTO t2 VALUES (1, 2),(2, 3),(3, 1),(4, 4),(5, 4),(6, 2),(7, 2),(8, 2),(9, 3),(10, 1); CREATE TRIGGER t1_ad AFTER DELETE ON t1 FOR EACH ROW UPDATE t2 SET t1_id = 33 WHERE t1_id = OLD.t1_id;

par orgerix » 20 mai 2007, 23:15

Je me suis un peu renseigner sur les TRIGGER, et d'après ce que j'ai vu, il ne permet de changer des variables SQL et je ne vois pas comment après entrainer une modification des données.

par Hubert Roksor » 20 mai 2007, 18:56

Pour ça il te faudrait un TRIGGER, les clés étrangères ne te donne le choix que d'effacer ou rendre NULL, autant que je sache.

par orgerix » 20 mai 2007, 18:52

Merci.

Donc si je comprend bien, je dois faire :
  • En plus de la clé ajouter une clé étrangère pour chaque table secondaire sur ma table principale
  • Mettre un index sur la clef primaire de chaque table secondaire.
Sinon, est ce possible plutot que de demmander la suppression à la suppression de demander la mise à jour d'un champ spécifique, avec une syntaxe de ce type ON DELETE SET champs1='aaa'

par Hubert Roksor » 18 mai 2007, 22:57

Sous MySQL ça n'existe que pour le moteur InnoDB, voir le manuel.

Au fait, plutôt que d'utiliser le login comme clé primaire je te recommanderais plutôt d'utiliser un UNSIGNED INT AUTO_INCREMENT. C'est plus compact donc plus performant.

Aide pour les relations entre tables

par orgerix » 18 mai 2007, 22:44

Bonjour,

Je suis débutant dans les relations entre les tables SQL.

J'ai plusieurs tables correspondant aux utilisateur, avec une général et une autre part module de mon site.

J'ai mis en clef primaire le nom de login dans toutes les tables.

Comment faire pour que la suppresion d'une ligne dans la table principale entraine la suppression de chaque ligne avec le même nom de login dans toutes les tables ?

Pour information, j'utilise MySQL (si jamais ca change...)