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'

왜 작동하지 않습니까?


연결 이 5 월의 도움을
샤시 SHEKHAR Barnwal

답변:



27

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

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

4
질문에 대한 답변을 얻기 위해 특정 데이터베이스로 검색을 제한하려면 add를 추가하십시오 AND TABLE_SCHEMA LIKE 'database_name'.
Gruber

뷰에 대한 추가 데이터를 보완하거나 검색하려면 다음을 고려하십시오. stackoverflow.com/questions/2834016/…
Manuel Jordan


7

작동합니다.

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

2
concat을 사용하여 'SHOW CREATE'로 조작 할 수 있기 때문에 더 좋습니다.
Moshe L

1
같은 대답Valerie Parham-Thompson
Manuel Jordan

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

모든보기를 찾는 또 다른 방법 :

information_schema.TABLES WHERE table_type = 'VIEW'에서 DISTINCT table_name 선택


0

Mysql 데이터베이스에서 뷰를 생성 한 경우 특정 데이터베이스의 모든 테이블을 볼 때 간단히 볼 수 있습니다.

쓰다:

--mysql> SHOW TABLES;

데이터베이스의 테이블 및 뷰 목록이 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.