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'

なぜこれが機能しないのですか?


回答:



27

インスタンスのすべてのデータベースですべてのビューを見つける方法は次のとおりです。

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

4
検索を特定のデータベースに制限して、提起された質問への回答を得たい場合は、addを追加しAND TABLE_SCHEMA LIKE 'database_name'ます。
グルーバー2013

補完またはビューの詳細データを取得するために検討してください。stackoverflow.com/questions/2834016/...
マヌエル・ヨルダン


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
マヌエルジョーダン

5

特定のビューに関する詳細情報を取得するために補足する

2つの有効な答えがあっても

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であり、TABLESではなくなります)。したがって、より多くのデータを取得でき、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

すべてのビューを見つける別の方法:

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


0

Mysqlデータベースでビューを作成した場合は、特定のデータベースのすべてのテーブルと同じように、ビューを表示できます。

書く:

--mysql> SHOW TABLES;

データベースのテーブルとビューのリストが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.