2010-05-14 83 views
87

我正在尋找一種方法來列出數據庫中的所有視圖。如何獲取MySQL視圖的列表?

起初,我發現並試圖一個answer on the MySQL forums

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' 

爲什麼不是這方面的工作?

+1

如果我的回答是不是你想要的,請告訴我,什麼是錯的,我會盡力幫助你。 – hgulyan 2010-05-15 09:46:15

回答

212
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW'; 

MySQL query to find all views in a database

+1

這個答案應該被接受爲正確的答案。 – ruipacheco 2013-08-22 16:28:59

+0

謝謝@Cocoaster,忘記了這個問題。如果你在評論中有人,他們會收到通知,並且更有可能回覆。 – Annan 2013-11-20 12:36:30

+2

如果您在當前選定的數據庫中查看視圖,則可以將「IN數據庫名稱」離開。 – kraftb 2015-06-02 17:11:26

0

您看到的錯誤可能是由於MySQL數據目錄中的非MySQL創建的目錄造成的。 MySQL將數據庫結構直接映射到文件系統上,數據庫映射到目錄,表格是這些目錄中的文件。

非工作數據庫的名稱看起來很可疑,就像某人已經在某處將mysql數據庫目錄複製到備份並將其留在MySQL的數據目錄中一樣。只要您不嘗試使用數據庫進行任何操作,這不是問題。不幸的是,信息模式會掃描它找到的所有數據庫,並發現這個數據庫不是一個真正的數據庫,並且感到不安。

解決的方法是在硬盤上找到mysql.bak目錄,並將其遠離MySQL。

0

嘗試移動那個mysql.bak目錄中的/var/lib/mysql以說/root/什麼的。它似乎像MySQL發現,它可能會導致該錯誤ERROR 1102 (42000): Incorrect database name 'mysql.bak'

14

這裏找到數據庫的實例的所有意見的方式:

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

如果您想限制搜索到某個數據庫以獲得對問題的回答,請添加'AND TABLE_SCHEMA LIKE'database_name''。 – Gruber 2013-08-06 10:41:22

0

另一種方式來找到所有查看:

SELECT DISTINCT TABLE_NAME FROM information_schema.TABLES WHERE table_type ='VIEW'

5
select * FROM information_schema.views\G; 
+0

不是唯美,而是工作 – 2016-05-31 10:07:55

2

這會奏效。

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

這樣比較好,因爲我可以用concat操縱它來顯示'CREATE'。 – 2017-09-10 05:57:58

+1

感謝您的投票。 – 2017-11-19 15:57:18

相關問題