Làm thế nào để có được một danh sách các quan điểm của MySQL?


127

Tôi đang tìm cách liệt kê tất cả các khung nhìn trong cơ sở dữ liệu.

Ban đầu tôi đã tìm và thử một câu trả lời trên các diễn đàn MySQL :

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

Bao giờ điều này không hoạt động, trả lại một bộ trống. (Tôi biết họ đang ở đó!)

Những điều này cũng thất bại:

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'

Tại sao điều này không hoạt động?


liên kết này có thể giúp đỡ
SHASHI SHEKHAR Barnwal

Câu trả lời:



27

Đây là một cách để tìm tất cả các khung nhìn trong mọi cơ sở dữ liệu trên ví dụ của bạn:

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

4
Nếu bạn muốn hạn chế tìm kiếm trong một cơ sở dữ liệu nhất định để có câu trả lời cho câu hỏi được đặt thêm AND TABLE_SCHEMA LIKE 'database_name'.
Gruber

Để bổ sung hoặc truy xuất thêm dữ liệu về chế độ xem, hãy xem xét: stackoverflow.com/questions/2834016/ Khăn
Manuel Jordan


7

Điều này sẽ làm việc.

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

2
Điều này tốt hơn, vì tôi có thể điều khiển nó để 'HIỂN THỊ TẠO' với concat.
Moshe L

1
Câu trả lời tương tự hơnValerie Parham-Thompson
Manuel Jordan

5

Để bổ sung về để có thêm thông tin về chế độ xem cụ thể

Ngay cả với hai câu trả lời hợp lệ

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

Bạn có thể áp dụng như sau (tôi nghĩ là tốt hơn):

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

là công việc tốt hơn trực tiếp với information_schema.VIEWS(quan sát bây giờ là XEM và không phải BẢNG nữa), do đó bạn có thể truy xuất nhiều dữ liệu hơn, sử dụng DESC VIEWSđể biết thêm chi tiết:

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

Ví dụ: quan sát VIEW_DEFINITIONtrường, do đó bạn có thể sử dụng trong hành động:

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

Tất nhiên bạn có nhiều lĩnh vực có sẵn để bạn xem xét.


2

Hãy thử di chuyển mysql.bakthư mục đó ra /var/lib/mysqlđể nói /root/hoặc một cái gì đó. Có vẻ như mysql đang tìm thấy điều đó và nó có thể gây ra ERROR 1102 (42000): Incorrect database name 'mysql.bak'lỗi đó .


1

Lỗi mà bạn nhìn thấy có lẽ là do thư mục không phải do MySQL tạo trong thư mục dữ liệu của MySQL. MySQL ánh xạ cấu trúc cơ sở dữ liệu khá trực tiếp vào hệ thống tệp, cơ sở dữ liệu được ánh xạ tới các thư mục và các bảng là các tệp trong các thư mục đó.

Tên của cơ sở dữ liệu không hoạt động trông có vẻ đáng ngờ giống như ai đó đã sao chép thư mục cơ sở dữ liệu mysql vào một bản sao lưu tại một số điểm và để nó trong thư mục dữ liệu của MySQL. Đây không phải là vấn đề miễn là bạn không thử và sử dụng cơ sở dữ liệu cho bất cứ điều gì. Thật không may, lược đồ thông tin quét tất cả các cơ sở dữ liệu mà nó tìm thấy và thấy rằng cơ sở dữ liệu này không phải là cơ sở dữ liệu thực sự và bị đảo lộn.

Giải pháp là tìm thư mục mysql.bak trên đĩa cứng và di chuyển nó ra khỏi MySQL.


0

Một cách khác để tìm tất cả Chế độ xem:

CHỌN DISTINCT tên_bảng TỪ information_schema.TABLES WHERE table_type = 'XEM'


0

Nếu bạn đã tạo bất kỳ chế độ xem nào trong cơ sở dữ liệu Mysql thì bạn chỉ có thể thấy nó khi bạn thấy tất cả các bảng trong cơ sở dữ liệu cụ thể của mình.

viết:

--mysql> SHOW TABLES;

bạn sẽ thấy danh sách các bảng và khung nhìn của cơ sở dữ liệu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.