2010-08-05 4 views
8

Au travail, on me dit constamment que lorsque des modifications sont apportées à une base de données MySQL, les vues doivent être «rafraîchies». La solution manuelle acceptée semble aller dans Workbench, cliquer avec le bouton droit de la souris et cliquer sur 'Rafraîchir tout'Actualiser les vues MySQL?

Est-ce que cela signifie juste effacer le cache? Ou est-ce que cela reconstruit les vues à partir de zéro, ou est-ce totalement faux? Ils semblent être capables de dire quand les vues n'ont pas été «rafraîchies», et je ne suis pas sûr qu'elles le comprennent plus que «parce que les choses doivent être rafraîchies quand elles sont changées».

Si la mémoire cache est simplement effacée, est-ce que 'FLUSH TABLES WITH READ LOCK' est suffisant?

Répondre

17

Les vues n'ont pas besoin d'être actualisées lorsque les données sont modifiées. Lorsque vous les interrogez, ils vont chercher les données les plus récentes.

Ils pourraient avoir besoin d'être recréée si votre structure de table changements:

La définition de la vue est au moment de la création « congelés », les modifications aux tables sous-jacentes ensuite n'affectent pas la définition de la vue. Par exemple, si une vue est définie comme SELECT * sur une table, les nouvelles colonnes ajoutées ultérieurement à la table ne font pas partie de la vue.

Source

+1

Et si je voulais ajouter les nouvelles colonnes je besoin de mettre à jour la définition de la vue? –

+2

@William: Oui, si vous voulez que les nouvelles colonnes apparaissent dans la vue. Mais je ne pense pas que "Rafraîchir tout" fait cela pour vous. Je pense que vous devez laisser tomber la vue et le recréer, ou utiliser ALTER VIEW: http://dev.mysql.com/doc/refman/5.0/en/alter-view.html –

+0

Merci, je pense que c'est la solution. Il doit être modifié. –