2010-05-14 12 views
87

Estoy buscando una manera de enumerar todas las vistas en una base de datos.¿Cómo obtener una lista de vistas de MySQL?

Inicialmente me pareció y trató de answer on the MySQL forums:

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

Cómo siempre esto no funciona, devolver un conjunto vacío. (Sé que están ahí!)

Estos también fallan:

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' 

Por qué no está funcionando?

+1

Si mi respuesta no es la que quería, por favor, dígame, qué sucede y trataré de ayudarlo. – hgulyan

Respuesta

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

MySQL query to find all views in a database

+1

Esta respuesta debe aceptarse como la correcta. – ruipacheco

+0

Gracias @Cocoaster, se olvidó de esta pregunta. Si usted @ alguien en los comentarios serán notificados y es más probable que respondan. – Annan

+2

Es posible dejar "IN database_name" ausente si busca la vista en el DB seleccionado actualmente. – kraftb

0

El error que está viendo probablemente se deba a un directorio no creado por MySQL en el directorio de datos de MySQL. MySQL mapea la estructura de la base de datos bastante directamente en el sistema de archivos, las bases de datos están mapeadas en directorios y las tablas son archivos en esos directorios.

El nombre de la base de datos que no funciona parece sospechosamente como si alguien hubiera copiado el directorio de la base de datos mysql a una copia de seguridad en algún momento y lo hubiera dejado en el directorio de datos de MySQL. Esto no es un problema, siempre y cuando no intentes utilizar la base de datos para nada. Lamentablemente, el esquema de información escanea todas las bases de datos que encuentra y descubre que esta no es una base de datos real y se enoja.

La solución es encontrar el directorio mysql.bak en el disco duro y moverlo lejos de MySQL.

0

Intenta mover el directorio mysql.bak de /var/lib/mysql para decir /root/ o algo así. Parece que mysql está encontrando eso y puede estar causando el error ERROR 1102 (42000): Incorrect database name 'mysql.bak'.

14

Aquí está una manera de encontrar todos los puntos de vista en cada base de datos en la instancia:

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

Si desea restringir la búsqueda a una determinada base de datos para obtener una respuesta a la pregunta planteada, agregue 'AND TABLE_SCHEMA LIKE 'database_name''. – Gruber

0

Otra forma de encontrar todos Ver:

SELECCIONAR nombre_tabla DISTINCT FROM information_schema.TABLES WHERE table_type = 'VER'

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

no es tan estético, pero funciona –

2

Esto funcionará.

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

Esto es mejor, ya que puedo manipularlo para 'MOSTRAR CREAR' con concat. –

+1

Gracias por la votación. –

Cuestiones relacionadas