Ответ 1
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
Я ищу способ отображения всех представлений в базе данных.
Сначала я нашел и попробовал ответить на форумах 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'
Почему это не работает?
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
Здесь вы можете найти все представления в каждой базе данных вашего экземпляра:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.tables
WHERE TABLE_TYPE LIKE 'VIEW';
select * FROM information_schema.views\G;
Это будет работать.
USE INFORMATION_SCHEMA;
SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.tables
WHERE TABLE_TYPE LIKE 'VIEW';
Попробуйте переместить эту директорию mysql.bak
из /var/lib/mysql
, чтобы сказать /root/
или что-то в этом роде. Кажется, что mysql находит это, и это может вызвать ошибку ERROR 1102 (42000): Incorrect database name 'mysql.bak'
.
Ошибка вашего просмотра, вероятно, связана с созданным не MySQL созданным каталогом в каталоге данных MySQL. MySQL напрямую сопоставляет структуру базы данных с файловой системой, базы данных сопоставляются с каталогами, а таблицы - это файлы в этих каталогах.
Имя нерабочей базы данных выглядит подозрительно, поскольку кто-то скопировал базу данных mysql в резервную копию в какой-то момент и оставил ее в каталоге данных MySQL. Это не проблема, если вы не пытаетесь использовать базу данных ни для чего. К сожалению, информационная схема сканирует все найденные базы данных и находит, что это не настоящая база данных и расстраивается.
Решение состоит в том, чтобы найти каталог mysql.bak на жестком диске и переместить его подальше от MySQL.
Еще один способ найти все View:
SELECT DISTINCT имя_таблицы FROM information_schema.TABLES WHERE table_type = 'VIEW'
Если вы создали какое-либо представление в базах данных Mysql, вы можете просто увидеть его так же, как все ваши таблицы в вашей конкретной базе данных.
записывать:
--mysql> SHOW TABLES;
Вы увидите список таблиц и просмотров вашей базы данных.
Чтобы дополнить информацией о конкретном представлении
Даже с двумя действительными ответами
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, а не TABLES), поэтому вы можете получить больше данных, используйте 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';
Конечно, у вас есть дополнительные поля для рассмотрения.