2010-05-14 14 views
87

Sto cercando un modo per elencare tutte le viste in un database.Come ottenere un elenco di viste MySQL?

Inizialmente ho trovato e provato un answer on the MySQL forums:

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

Come mai questo non funziona, restituendo un insieme vuoto. (So ​​che sono in là!)

Questi anche fallire:

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 è questo lavoro?

+1

Se la mia risposta non è quello che volevi, per favore dimmi, cosa c'è che non va e cercherò di aiutarti. – hgulyan

risposta

212
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW'; 

MySQL query to find all views in a database

+1

Questa risposta dovrebbe essere accettata come quella corretta. – ruipacheco

+0

Grazie a @Cocoaster, ho dimenticato questa domanda. Se tu @ qualcuno nei commenti, questi saranno avvisati e avranno maggiori probabilità di rispondere. – Annan

+2

È possibile lasciare "IN database_name" lontano se si cerca la vista nel DB attualmente selezionato. – kraftb

0

L'errore di visualizzazione è 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 alle 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 lo abbia lasciato nella directory dei dati di MySQL. Questo non è un problema finché non provi a usare il database per niente. Sfortunatamente lo schema delle informazioni 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 spostarla bene da MySQL.

0

Provare a spostare la directory mysql.bak da /var/lib/mysql a dire /root/ o qualcosa del genere. Sembra che mysql lo stia cercando e potrebbe causare l'errore ERROR 1102 (42000): Incorrect database name 'mysql.bak'.

14

Ecco un modo per trovare tutti i punti di vista in ogni database nel vostro esempio:

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

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

0

Un altro modo per trovare tutte Vista:

SELEZIONA table_name DISTINCT FROM information_schema.TABLES WHERE table_type = 'VIEW'

5
select * FROM information_schema.views\G; 
+0

non come estetico, ma fa il lavoro –

2

Questo funzionerà.

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

Questo è meglio, in quanto posso manipolarlo in 'MOSTRA CREA' con concat. –

+1

Grazie per il voto. –

Problemi correlati