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'

यह काम क्यों नहीं कर रहा है?


लिंक यह मदद कर सकता है
SHASHI SHEKHAR बरनवाल

जवाबों:


291

3
यदि आप वर्तमान में चयनित DB में दृश्य को देखते हैं, तो "IN डेटाबेस_नाम" को छोड़ना संभव है।
क्राफ्ट

देखने के बारे में और अधिक डेटा को पूरक या पुनर्प्राप्त करने के लिए विचार करें: stackoverflow.com/questions/2834016/…
मैनुअल जॉर्डन

27

आपके उदाहरण में हर डेटाबेस में सभी विचारों को खोजने का एक तरीका है :

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

4
यदि आप किसी प्रश्न को हल करने के लिए एक निश्चित डेटाबेस के लिए खोज को प्रतिबंधित करना चाहते हैं, तो आप इसे जोड़ सकते हैं AND TABLE_SCHEMA LIKE 'database_name'
ग्रुबर

विचार करने के बारे में और अधिक डेटा को पूरक या पुनर्प्राप्त करने के लिए विचार करें: stackoverflow.com/questions/2834016/…
मैनुएल जॉर्डन



5

किसी विशिष्ट दृश्य के बारे में अधिक जानकारी प्राप्त करने के लिए पूरक के लिए

यहां तक ​​कि दो मान्य उत्तरों के साथ

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(अब है निरीक्षण दृश्य और नहीं तालिकाएं अब), इस प्रकार आप अधिक डेटा, उपयोग प्राप्त कर सकते हैं 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

सभी को देखने का दूसरा तरीका:

DISTINCT table_name सेलेक्ट करें info_schema.TABLES WHERE टेबल_type = 'देखें'


0

यदि आपने माईसकल डेटाबेस में कोई दृश्य बनाया है तो आप बस इसे देख सकते हैं जैसा कि आप अपने विशेष डेटाबेस में अपने सभी तालिकाओं को देखते हैं।

लिखो:

--mysql> SHOW TABLES;

आप अपने डेटाबेस की तालिकाओं और विचारों की सूची देखेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.