[mysql] MySQL 뷰 목록을 얻는 방법?

데이터베이스의 모든 뷰를 나열하는 방법을 찾고 있습니다.

처음에는 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';

데이터베이스에서 모든 뷰를 찾는 MySQL 쿼리


답변

인스턴스의 모든 데이터베이스 에서 모든 뷰를 찾는 방법은 다음과 같습니다 .

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


답변

특정 뷰에 대한 추가 정보를 얻기 위해 보완

두 가지 유효한 답변으로도

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

물론 더 많은 분야를 고려할 수 있습니다.


답변

mysql.bak디렉토리 /var/lib/mysql를 말 /root/이나 다른 것으로 옮기십시오 . mysql이 그것을 찾는 것처럼 보이며 그 ERROR 1102 (42000): Incorrect database name 'mysql.bak'오류를 일으킬 수 있습니다 .


답변

오류는 아마도 MySQL의 데이터 디렉토리에 MySQL이 아닌 디렉토리로 인한 것입니다. MySQL은 데이터베이스 구조를 파일 시스템에 직접 매핑하고 데이터베이스는 디렉토리에 매핑하며 테이블은 해당 디렉토리의 파일입니다.

작동하지 않는 데이터베이스의 이름은 누군가가 mysql 데이터베이스 디렉토리를 백업에 복사하여 MySQL의 데이터 디렉토리에 남겨둔 것처럼 보입니다. 데이터베이스를 다른 용도로 사용하지 않는 한 문제가되지 않습니다. 불행하게도 정보 스키마는 찾은 모든 데이터베이스를 검색하여이 데이터베이스가 실제 데이터베이스가 아니며 화를 낸다는 것을 알게됩니다.

해결책은 하드 디스크에서 mysql.bak 디렉토리를 찾아서 MySQL에서 멀리 떨어진 곳으로 옮기는 것입니다.