programing

MySQL 뷰 목록을 가져오려면 어떻게 해야 합니까?

goodjava 2023. 1. 15. 16:54

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

특정 보기에 대한 추가 정보를 얻으려면 다음과 같이 하십시오.

두 개의 유효한 답변이 있더라도

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

물론 고려할 수 있는 필드가 더 있습니다.

 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에서 멀리 옮기는 것입니다.

Mysql 데이터베이스에 뷰를 작성한 경우 특정 데이터베이스에 있는 모든 테이블을 볼 수 있습니다.

기입:

--mysql> SHOW TABLES;

데이터베이스 테이블 및 뷰 목록이 나타납니다.

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

information_schema에서 DISTING table_name을 선택합니다.표 여기서 table_type = '보기'

언급URL : https://stackoverflow.com/questions/2834016/how-to-get-a-list-of-mysql-views