di riferimento chiave esterna InnoDB mysql
-
21-09-2019 - |
Domanda
In poche parole: Ho una tabella con 2 colonne: uno è il nome utente e l'altro è il soprannome. Ho un altro tavolo dove ho 2 colonne: uno è il nome utente e altro è countNicknames
.voglio countNicknames per contenere il numero di nomi di ciascun utente (e ogni volta che si inserisce una nuova nick alla tabella 1, il valore sotto table2.countNicknames aggiorna automaticamente.
Si può annotare come costruire la seconda tabella per fare riferimento al primo?
Soluzione
Perché non basta contare quando è necessario il valore?
Altri suggerimenti
voglio countNicknames per contenere il numero di nomi di ciascun utente (e ogni volta che si inserisce una nuova nick alla tabella 1, il valore sotto table2.countNicknames aggiorna automaticamente.
Questa è effettivamente che vista farà.
CREATE OR REPLACE VIEW user_nickname_count AS
SELECT t.username,
COUNT(*) 'countNicknames'
FROM TABLE t
GROUP BY t.username
Una vista guarda come un tavolo, in modo da CAH aderire ad esso, se necessario. E l'unico in testa è che si tratta effettivamente solo una query di selezione in esecuzione -. I valori sono calcolati su richiesta, piuttosto che dover impostazione trigger
Per ulteriori informazioni sulle viste, consultare la documentazione .
Bene, @ suggerimento di Lasse è meglio, ma ... c'è altri due altre opzioni ...
-
Il MySql ha trigger? Se è così, allora si dovrebbe aggiungere un Insert, Update, Delete grilletto sul primo tavolo che gli aggiornamenti (o inserti o cancella, se necessario) CountNickNames della seconda tabella degli attributi ogni volta che si inserisce un disco, aggiornati o cancellati dalla prima tabella .. .
Crea trigger NickNameCountTrig On NickNameCountTable Per Insert, Update, Delete Come Aggiornare Imposta nct CountNickNames = (Selezionare il conteggio () Da FirstTable Dove Name = nct.Name) Da nct NickNameCountTable Dove denominazione di (Seleziona Nome Distinto da inserito Unione Seleziona Nome distinto da cancellato) - ----------------------------------------------- Inserire NickNameCountTable (Nome, CountNickNames) Selezionare il nome, conta () da FirstTable ft Dove non esiste (Select * From NickNameCountTable Dove Name = ft.Name) - ------ Questo è opzionale ----------------------- Eliminare NickNameCountTable Dove CountNickNames = 0
-
Il MySql hanno indicizzato viste (o qualche equivilent)? a quanto pare non - in modo da non importa questa opzione ....