Référence de la clé étrangère dans une base MySQL InnoDB
-
21-09-2019 - |
Question
En termes simples: J'ai une table avec 2 colonnes: l'une est le nom d'utilisateur et autre surnom. J'ai une autre table où j'ai 2 colonnes: un nom d'utilisateur est autre et est countNicknames
.Je veux countNicknames contenir le nombre de surnoms chaque utilisateur a (et chaque fois que j'insérer un nouveau surnom au tableau 1, la valeur sous table2.countNicknames mettra automatiquement à jour.
Pouvez-vous s'il vous plaît écrivez comment construire la deuxième table pour faire référence à la première?
La solution
Pourquoi ne pas compter juste au moment où vous avez besoin de la valeur?
Autres conseils
Je veux countNicknames contenir le nombre de surnoms chaque utilisateur a (et chaque fois que j'insérer un nouveau surnom au tableau 1, la valeur sous table2.countNicknames mettra automatiquement à jour.
est effectivement ce que vue va faire.
CREATE OR REPLACE VIEW user_nickname_count AS
SELECT t.username,
COUNT(*) 'countNicknames'
FROM TABLE t
GROUP BY t.username
Une vue ressemble comme une table, vous CAH joindre à elle si nécessaire. Et la seule tête est qu'il est effectivement juste une requête SELECT en cours d'exécution -. Les valeurs sont calculées sur la demande, plutôt que d'avoir à configurer les déclencheurs
Pour plus informations sur les vues, consultez la documentation .
Eh bien, @ suggestion de Lasse est meilleur, mais ... il y a deux autres Une autre option ...
-
Est-ce que MySql ont des déclencheurs? Si oui, alors vous ajouteriez un Insert, Update, Delete déclencheur sur la première table que les mises à jour (ou insertions ou suppressions si nécessaire), le second de CountNickNames de la table d'attributs à chaque fois qu'un enregistrement est inséré, mis à jour ou supprimé de la première table .. .
Créer un déclencheur NickNameCountTrig sur NickNameCountTable Insert, Update, Delete Comme Mise à jour Set NCT CountNickNames = (Sélectionnez Count () De FirstTable Où Nom = nct.Name) De NickNameCountTable NCT Où Nom Dans (Sélectionner Nom Distinct inséré syndicat Sélectionnez Nom Distinct De supprimé) - ----------------------------------------------- Insérer NickNameCountTable (Nom, CountNickNames) Sélectionnez le nom, compte () de FirstTable pieds Où Non Exists (Select * from NickNameCountTable Où Nom = ft.Name) - ------ Cette option est facultative ----------------------- supprimer NickNameCountTable Où CountNickNames = 0
-
Est-ce que MySql ont des vues indexées (ou un equivilent)? apparemment pas - l'esprit si jamais cette option ....