Як отримати список переглядів MySQL?


127

Я шукаю спосіб перелічити всі перегляди в базі даних.

Спочатку я знайшов та спробував відповідь на форумах MySQL :

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

Як ніколи це не працює, повертаючи порожній набір. (Я знаю, що вони там!)

Вони також не вдається:

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'

Чому це не працює?


посилання це може допомогти
SHASHI SHEKHAR Barnwal

Відповіді:


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

Запит MySQL для пошуку всіх переглядів у базі даних


3
Можна залишити "IN_ ім'я_бази даних" подалі, якщо ви шукаєте подання у вибраній БД.
kraftb

Щоб доповнити чи отримати більше даних про представлення, розгляньте: stackoverflow.com/questions/2834016/…
Мануель Йордан,

27

Ось спосіб знайти всі перегляди у кожній базі даних вашого примірника:

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

4
Якщо ви хочете обмежити пошук певною базою даних, щоб отримати відповідь на поставлене запитання, додайте AND TABLE_SCHEMA LIKE 'database_name'.
Грубер

Щоб доповнити чи отримати більше даних про представлення, розгляньте: stackoverflow.com/questions/2834016/…
Мануель Йордан


7

Це спрацює.

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

2
Це краще, оскільки я можу ним маніпулювати, щоб "ПОКАЗУВАТИ СТВОРИТИ" з допомогою лаконічності.
Моше Л

1
Та сама відповідь, ніжValerie Parham-Thompson
Мануель Йордан

5

Щоб доповнити інформацію про конкретний вигляд

Навіть з двома достовірними відповідями

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';

Ви можете застосувати наступне (я думаю, що краще):

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

краще працювати безпосередньо з information_schema.VIEWS(спостерігайте, зараз VIEWS, а не ТАБЛИЦІ ), таким чином ви можете отримати більше даних і використовувати DESC VIEWSдля отримання детальної інформації:

+----------------------+---------------------------------+------+-----+---------+-------+
| 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    |       |
+----------------------+---------------------------------+------+-----+---------+-------+

Наприклад, спостерігайте за VIEW_DEFINITIONполем, таким чином ви можете використовувати в дії:

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

Звичайно, у вас є ще поле для розгляду.


2

Спробуйте перемістити цей mysql.bakкаталог, /var/lib/mysqlщоб сказати /root/чи щось. Здається, що mysql знаходить це, і це може спричинити цю ERROR 1102 (42000): Incorrect database name 'mysql.bak'помилку.


1

Помилка вашого бачення, ймовірно, пов’язана з створеним не-MySQL каталогом у каталозі даних MySQL. MySQL відображає структуру бази даних досить безпосередньо на файлову систему, бази даних відображаються в каталогах, а таблиці - файли в цих каталогах.

Ім'я непрацюючої бази даних виглядає підозріло, ніби хтось скопіював каталог бази даних mysql в резервну копію в якийсь момент і залишив її в каталозі даних MySQL. Це не проблема, якщо ви не намагаєтеся використовувати базу даних ні для чого. На жаль, інформаційна схема сканує всі знайдені бази даних і виявляє, що ця не є реальною базою даних і засмучується.

Рішення полягає в пошуку каталогу mysql.bak на жорсткому диску та віддаленні його від MySQL.


0

Ще один спосіб знайти усі Перегляд:

ВИБІРТЕ ДИСТИНЦТ__Имена таблиці ВІД інформації_шами.ТАБЛЮДИ ДІМИ table_type = 'ПОГЛЯД'


0

Якщо ви створили будь-який вид у базах даних Mysql, то ви можете просто побачити його так, як ви бачите всі таблиці у вашій конкретній базі даних.

написати:

--mysql> SHOW TABLES;

ви побачите список таблиць та представлень вашої бази даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.