2010-05-14 14 views
87

Ich suche nach einer Möglichkeit, alle Ansichten in einer Datenbank aufzulisten.Wie bekomme ich eine Liste von MySQL Ansichten?

Anfangs fand ich und versuchte, ein answer on the MySQL forums:

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

Wie auch immer dies nicht funktioniert, eine leere Menge zurück. (Ich weiß, dass sie da drin sind!)

Diese scheitern auch:

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' 

Warum ist das nicht funktioniert?

+1

Wenn meine Antwort nicht das ist, was Sie wollten, bitte, sagen Sie mir, was los ist und ich werde versuchen, Ihnen zu helfen. – hgulyan

Antwort

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

MySQL query to find all views in a database

+1

Diese Antwort sollte als die richtige akzeptiert werden. – ruipacheco

+0

Danke @cocoaster, vergaß diese Frage. Wenn Sie @ jemand in Kommentaren werden sie benachrichtigt und antworten eher. – Annan

+2

Es ist möglich, "IN database_name" wegzulassen, wenn Sie in der aktuell ausgewählten Datenbank nach einer Ansicht suchen. – kraftb

0

Der Fehler, den Sie sehen, liegt wahrscheinlich an einem von MySQL nicht erstellten Verzeichnis im MySQL-Datenverzeichnis. MySQL ordnet die Datenbankstruktur ziemlich direkt auf das Dateisystem zu, Datenbanken werden Verzeichnissen zugeordnet und Tabellen sind Dateien in diesen Verzeichnissen.

Der Name der nicht funktionierenden Datenbank sieht verdächtig so aus, als hätte jemand das Datenbankverzeichnis mysql irgendwann in eine Sicherungskopie kopiert und im Datenverzeichnis von MySQL belassen. Dies ist kein Problem, solange Sie die Datenbank nicht für irgendetwas verwenden. Leider durchsucht das Informationsschema alle gefundenen Datenbanken und stellt fest, dass es sich nicht um eine echte Datenbank handelt.

Die Lösung besteht darin, das Verzeichnis mysql.bak auf der Festplatte zu finden und es weit weg von MySQL zu verschieben.

0

Versuchen Sie, das mysql.bak Verzeichnis aus /var/lib/mysql zu verschieben, um /root/ oder etwas zu sagen. Es scheint, als würde mysql das finden und es könnte dazu führen, dass ERROR 1102 (42000): Incorrect database name 'mysql.bak' Fehler.

14

Hier ist ein Weg, um alle Ansichten in zu finden jede Datenbank auf Ihrem Beispiel:

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

Wenn Sie die Suche auf eine bestimmte Datenbank beschränken möchten, um eine Antwort auf die gestellte Frage zu erhalten, fügen Sie 'AND TABLE_SCHEMA LIKE 'Datenbankname' hinzu. – Gruber

0

Ein anderer Weg, alle anzeigen zu finden:

SELECT DISTINCT table_name FROM information_schema.TABLES WHERE table_type = 'ANSICHT'

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

nicht so ästhetisch, aber macht den Job –

2

Das wird funktionieren.

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

Das ist besser, wie ich es manipulieren kann, um mit concat "SHOW CREATE" zu erstellen. –

+1

Danke für die Abstimmung. –

Verwandte Themen