MySQL görünümlerinin bir listesi nasıl alınır?


127

Bir veritabanındaki tüm görünümleri listelemenin bir yolunu arıyorum.

Başlangıçta MySQL forumlarında bir cevap buldum ve denedim :

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

Nasılsa bu işe yaramazsa, boş bir set döndürür. (Orada olduklarını biliyorum!)

Bunlar da başarısız olur:

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'

Bu neden çalışmıyor?


bağlantı bu yardımcı olabilir
SHASHI SHEKHAR Barnwal

Yanıtlar:



27

Örneğinizdeki her veritabanındaki tüm görünümleri bulmanın bir yolu :

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

4
Aramayı belirli bir veri tabanına sınırlamak istiyorsanız sorulan soruya cevap almak için ekleyin AND TABLE_SCHEMA LIKE 'database_name'.
Gruber

Görünümle ilgili daha fazla veriyi tamamlamak veya almak için şunları göz önünde bulundurun: stackoverflow.com/questions/2834016/…
Manuel Jordan


7

Bu çalışacak.

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

2
Bu daha iyi çünkü onu concat ile 'SHOW CREATE' olarak değiştirebiliyorum.
Moshe L

1
Cevapla aynıValerie Parham-Thompson
Manuel Jordan

5

To tamamlayacak belirli bir görünümle ilgili daha fazla bilgi almak için yaklaşık

İki geçerli cevapla bile

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

Aşağıdakileri uygulayabilirsiniz (bence daha iyi):

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

doğrudan daha çalışmadır information_schema.VIEWS(şimdi gözlemlemek GÖRÜŞLERİ değil TABLOLAR artık), böylece daha fazla veri, kullanım alabilirsiniz DESC VIEWSDaha fazla bilgi için:

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

Örneğin VIEW_DEFINITIONalanı gözlemleyin , böylece eylemde kullanabilirsiniz:

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

Elbette değerlendirebileceğiniz daha fazla alan var.


2

Bu mysql.bakdizini /var/lib/mysqlsöylemek /root/ya da başka bir şey için dışarı taşımayı deneyin . Görünüşe göre mysql bunu buluyor ve bu ERROR 1102 (42000): Incorrect database name 'mysql.bak'hataya neden oluyor olabilir .


1

Gördüğünüz hata, muhtemelen MySQL'in veri dizininde MySQL oluşturulmamış bir dizinden kaynaklanmaktadır. MySQL, veritabanı yapısını oldukça doğrudan dosya sistemine eşler, veritabanları dizinlerle eşlenir ve tablolar bu dizinlerdeki dosyalardır.

Çalışmayan veritabanının adı, şüpheli bir şekilde birisi mysql veritabanı dizinini bir noktada bir yedeğe kopyalayıp MySQL'in veri dizininde bırakmış gibi görünüyor. Veritabanını herhangi bir şey için kullanmadığınız sürece bu bir sorun değildir. Ne yazık ki bilgi şeması bulduğu tüm veritabanlarını tarar ve bunun gerçek bir veritabanı olmadığını bulur ve altüst olur.

Çözüm, sabit diskte mysql.bak dizinini bulmak ve onu MySQL'den uzağa taşımaktır.


0

Tüm Görünümü bulmanın başka bir yolu:

İnformation_schema.TABLES WHERE table_type = 'VIEW' DAN DISTINCT table_name SEÇİN


0

Mysql veritabanlarında herhangi bir görünüm oluşturduysanız, bunu kendi veritabanınızdaki tüm tablolarınızı gördüğünüz gibi kolayca görebilirsiniz.

yazmak:

--mysql> SHOW TABLES;

Veritabanınızın tablolarının ve görünümlerinin listesini göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.