Come ottenere un elenco di visualizzazioni MySQL?


127

Sto cercando un modo per elencare tutte le visualizzazioni in un database.

Inizialmente ho trovato e provato una risposta sui forum MySQL :

SELECT table_name
FROM information_schema.views
WHERE information_schema.views.table_schema LIKE 'view%';

Come mai questo non funziona, restituendo un set vuoto. (So ​​che sono lì!)

Anche questi falliscono:

mysql> use information_schema;
Database changed
mysql> select * from views;
ERROR 1102 (42000): Incorrect database name 'mysql.bak'
mysql> select * from tables;
ERROR 1102 (42000): Incorrect database name 'mysql.bak'

Perché non funziona?


link questo può aiutare
SHASHI SHEKHAR Barnwal il

Risposte:



27

Ecco un modo per trovare tutte le visualizzazioni in ogni database sulla tua istanza:

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM information_schema.tables 
WHERE TABLE_TYPE LIKE 'VIEW';

4
Se si desidera limitare la ricerca a un determinato database per ottenere una risposta alla domanda posta, aggiungere AND TABLE_SCHEMA LIKE 'database_name'.
Gruber

Per integrare o recuperare più dati sulla vista, prendere in considerazione: stackoverflow.com/questions/2834016/…
Manuel Jordan,


7

Questo funzionerà.

    USE INFORMATION_SCHEMA;
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM information_schema.tables
    WHERE TABLE_TYPE LIKE 'VIEW';

2
Questo è meglio, poiché posso manipolarlo per "MOSTRARE CREARE" con concat.
Moshe L

1
Stessa risposta diValerie Parham-Thompson
Manuel Jordan,

5

Per completare in procinto di ottenere maggiori informazioni su una vista specifica

Anche con le due risposte valide

SHOW FULL TABLES IN your_db_name WHERE TABLE_TYPE LIKE 'VIEW';

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM information_schema.TABLES 
WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'your_db_name';

È possibile applicare quanto segue (penso sia meglio):

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM information_schema.VIEWS 
WHERE TABLE_SCHEMA LIKE 'your_db_name';

è meglio lavorare direttamente con information_schema.VIEWS(osservare ora è VISUALIZZA e non più TABELLE ), quindi è possibile recuperare più dati, utilizzare DESC VIEWSper maggiori dettagli:

+----------------------+---------------------------------+------+-----+---------+-------+
| Field                | Type                            | Null | Key | Default | Extra |
+----------------------+---------------------------------+------+-----+---------+-------+
| TABLE_CATALOG        | varchar(64)                     | YES  |     | NULL    |       |
| TABLE_SCHEMA         | varchar(64)                     | YES  |     | NULL    |       |
| TABLE_NAME           | varchar(64)                     | YES  |     | NULL    |       |
| VIEW_DEFINITION      | longtext                        | YES  |     | NULL    |       |
| CHECK_OPTION         | enum('NONE','LOCAL','CASCADED') | YES  |     | NULL    |       |
| IS_UPDATABLE         | enum('NO','YES')                | YES  |     | NULL    |       |
| DEFINER              | varchar(93)                     | YES  |     | NULL    |       |
| SECURITY_TYPE        | varchar(7)                      | YES  |     | NULL    |       |
| CHARACTER_SET_CLIENT | varchar(64)                     | NO   |     | NULL    |       |
| COLLATION_CONNECTION | varchar(64)                     | NO   |     | NULL    |       |
+----------------------+---------------------------------+------+-----+---------+-------+

Ad esempio, osserva il VIEW_DEFINITIONcampo, quindi puoi usare in azione:

SELECT TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION 
FROM information_schema.VIEWS 
WHERE TABLE_SCHEMA LIKE 'your_db_name';

Naturalmente hai più campi disponibili per la tua considerazione.


2

Prova a spostare quella mysql.bakdirectory fuori /var/lib/mysqlda dire /root/o qualcosa del genere. Sembra che mysql lo stia trovando e potrebbe causare ERROR 1102 (42000): Incorrect database name 'mysql.bak'quell'errore.


1

L'errore che stai vedendo è probabilmente dovuto a una directory non creata da MySQL nella directory dei dati di MySQL. MySQL mappa la struttura del database direttamente sul file system, i database sono mappati su directory e le tabelle sono file in quelle directory.

Il nome del database non funzionante sembra sospetto che qualcuno abbia copiato la directory del database mysql in un backup a un certo punto e l'ha lasciato nella directory dei dati di MySQL. Questo non è un problema finché non si tenta di utilizzare il database per nulla. Sfortunatamente lo schema informativo analizza tutti i database che trova e trova che questo non è un vero database e si arrabbia.

La soluzione è trovare la directory mysql.bak sul disco rigido e allontanarla da MySQL.


0

Un altro modo per trovare tutto Visualizza:

SELEZIONA DISTINCT nome_tabella DA information_schema.TABLES DOVE table_type = 'VISUALIZZA'


0

Se hai creato una vista nei database Mysql, puoi semplicemente vederla mentre vedi tutte le tue tabelle nel tuo particolare database.

Scrivi:

--mysql> SHOW TABLES;

vedrai un elenco di tabelle e viste del tuo database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.