Fremdschlüsselverweis in mysql innodb
-
21-09-2019 - |
Frage
Einfach gesagt: Ich habe eine Tabelle mit zwei Spalten: Die eine ist Benutzername und andere Spitznamen. Ich habe eine andere Tabelle, wo ich 2 Spalten: Die eine ist Benutzername und andere countNicknames
.Ich möchte countNicknames die Anzahl der Spitznamen zu enthalten hat jeder Benutzer (und wann immer füge ich einen neuen Spitznamen in der Tabelle 1, der Wert unter table2.countNicknames wird automatisch aktualisiert.
Können Sie bitte aufschreiben, wie die zweite Tabelle zu konstruieren, um den ersten zu verweisen?
Lösung
Warum nicht nur zählen, wenn Sie den Wert brauchen?
Andere Tipps
Ich möchte countNicknames die Anzahl der Spitznamen zu enthalten hat jeder Benutzer (und wann immer füge ich einen neuen Spitznamen in der Tabelle 1, der Wert unter table2.countNicknames wird automatisch aktualisiert.
Dies ist effektiv, was eine Ansicht tun wird.
CREATE OR REPLACE VIEW user_nickname_count AS
SELECT t.username,
COUNT(*) 'countNicknames'
FROM TABLE t
GROUP BY t.username
Ein Blick Aussehen wie ein Tisch, so dass Sie es kommen CAH, wenn nötig. Und der einzige Aufwand ist, dass es effektiv nur eine SELECT-Abfrage ausgeführt werden. - Die Werte werden berechnet auf Nachfrage, anstatt auf Setup-Trigger mit
Für weitere Informationen zu Ansichten finden Sie in der Dokumentation .
Nun, @ Lass Vorschlag besser ist, aber ... es ist zwei weitere Optionen ...
-
Does MySql haben Trigger? Ist dies der Fall, dann würden Sie ein Insert, Update, Delete-Trigger auf der ersten Tabelle hinzufügen, dass Aktualisierungen (oder Einlagen oder Löschungen je nach Bedarf) die CountNickNames der zweiten Tabelle jedes Mal ein Rekord-Attribut wird eingefügt, aktualisiert oder aus der ersten Tabelle gelöscht .. .
Erstellen Sie Trigger-NickNameCountTrig Auf NickNameCountTable Für Insert, Update, Delete Wie Update NCT Set CountNickNames = (Select Count () Von FirstTable Wo Name = nct.Name) Von NickNameCountTable NCT Wo Name In (Select Distinct Namen von eingefügt Union Wählen Sie Distinct Name aus gelöscht) - ----------------------------------------------- Insert NickNameCountTable (Name, CountNickNames) Wählen Sie Name, count () von FirstTable ft Wo nicht Exists (Select * From NickNameCountTable Wo Name = ft.Name) - ------ Dies ist optional ----------------------- Löschen NickNameCountTable Wo CountNickNames = 0
-
Does MySql haben indizierte Sichten (oder einige equivilent)? offenbar nicht - so nie diese Option dagegen ....