2009-11-28 7 views
1

J'ai un 2 tables appelées «membres» et «utilisateurs» qui ont tous deux 2 colonnes: nom & sexe. Je veux que chaque fois que j'ajouter un nouveau « nom » à la table des membres, la valeur dans la colonne « genre » dans cette ligne serait mise à jour de la table 'utilisateurs:Type de table MySql, comment dessiner automatiquement les données d'une table d'une table à une autre?

**users:** 
Emilia - F 
John - M 
David - M 
**members:** 
Synthia - F 

'INSERT INTO members VALUES('David')...or whatever' 
now **members:** 
Synthia - F 
David - M 
+1

stockage physiquement les mêmes données (la colonne de genre) dans deux tableaux différents va à l'encontre du principe de la normalisation des bases de données relationnelles et peut conduire à la corruption de données (en supposant que, à un moment donné la valeur utilisateurs est modifiée par la copie stockée dans les membres n'est pas, cela pourrait être encore plus déroutant que vos utilisateurs ayant des changements de sexe pour commencer avec^_ ^) – Rory

Répondre

4

Vous pouvez utiliser un insert trigger. Cependant, vous ne devriez pas avoir une copie du genre dans deux tables différentes - cela rompt la normalisation, nécessite plus d'espace de stockage et risque de désynchroniser les deux copies. Au lieu de cela, vous devez utiliser une clé étrangère et joindre les tables lorsque vous avez besoin d'informations à la fois. Vous pouvez utiliser le nom d'utilisateur en tant que clé étrangère ou l'identifiant d'auto-incrémentation, si vous en avez un.

3

Je pense que vous parlez d'une colonne calculée, mais je ne suis pas sûr que MySQL les supporte (google un peu, je peux me tromper). Pourquoi ne pas créer une vue sur les deux tables à la place? Vous pourriez essayer quelque chose comme ...

CREATE VIEW MemberDetail 
AS 
    SELECT mem.Name, 
    usr.Gender 
    FROM Members mem 
    INNER JOIN Users usr ON mem.Name = usr.Name; 
+0

MySQL supporte les vues (mais pas les vues matérialisées) depuis 5.0 –

0

comment sur INSERT ... SELECT syntaxe?

INSERT into members (name, gender) 
SELECT u.name, u.gender FROM users u WHERE u.name='Cynthia'; 
Questions connexes