Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में रेगुलर एक्सप्रेशन से विशिष्ट पैटर्न वाले डेटाबेस नाम कैसे खोजें?

MySQL में INFORMATION_SCHEMA.SCHEMATA से डेटाबेस नामों को रेगुलर एक्सप्रेशन (REGEXP) द्वारा फ़िल्टर करके खोजें। यह नामकरण परंपरा (जैसे 'prefix_UpperCase') आधारित खोज के लिए उपयोगी है।

उदाहरण: 'bank_' के बाद अपरकेस अक्षर वाले डेटाबेस

टेस्ट डेटाबेस बनाएं:

mysql> CREATE DATABASE bank_APP1;
mysql> CREATE DATABASE bank_APP2;
mysql> CREATE DATABASE bank_APP3;

REGEXP के साथ क्वेरी:

mysql> SELECT * FROM information_schema.schemata
WHERE SCHEMA_NAME REGEXP '^bank_+[A-Z]';

आउटपुट:

+--------------+-------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+-------------+----------------------------+------------------------+----------+
| def          | bank_app1   | utf8                       | utf8_unicode_ci        | NULL     |
| def          | bank_app2   | utf8                       | utf8_unicode_ci        | NULL     |
| def          | bank_app3   | utf8                       | utf8_unicode_ci        | NULL     |
+--------------+-------------+----------------------------+------------------------+----------+

रेगुलर एक्सप्रेशन व्याख्या

'^bank_+[A-Z]'

  • ^: स्ट्रिंग की शुरुआत
  • bank_: शाब्दिक 'bank_'
  • +: पिछले वर्ण (_) का एक या अधिक (यहां '_' एक से अधिक बार)
  • [A-Z]: कोई भी अपरकेस अक्षर (A-Z)

नोट: MySQL में REGEXP डिफ़ॉल्ट रूप से केस-इनसेंसिटिव होता है (कॉलेशन पर निर्भर)। आउटपुट में 'bank_app1' लोअरकेस में दिखता है क्योंकि MySQL डेटाबेस नाम लोअरकेस में स्टोर करता है (Windows पर) या कॉलेशन के अनुसार।

केस-सेंसिटिव खोज

-- बाइनरी कॉलेशन के साथ
WHERE SCHEMA_NAME COLLATE utf8mb4_bin REGEXP '^bank_+[A-Z]'

-- या REGEXP BINARY (MySQL 8.0+)
WHERE SCHEMA_NAME REGEXP BINARY '^bank_+[A-Z]'

अन्य उपयोगी पैटर्न

-- 'test' से शुरू होने वाले
WHERE SCHEMA_NAME REGEXP '^test'

-- '_' के बाद अंक वाले
WHERE SCHEMA_NAME REGEXP '^.*_[0-9]+$'

-- केवल लोअरकेस और अंडरस्कोर
WHERE SCHEMA_NAME NOT REGEXP '[A-Z0-9]'

-- विशिष्ट लंबाई
WHERE SCHEMA_NAME REGEXP '^.{5,10}$'

संबंधित मेटाडेटा कॉलम

INFORMATION_SCHEMA.SCHEMATA में उपयोगी कॉलम:

  • CATALOG_NAME: कैटलॉग नाम (आमतौर पर 'def')
  • SCHEMA_NAME: डेटाबेस नाम
  • DEFAULT_CHARACTER_SET_NAME: डिफ़ॉल्ट चार्टरसेट
  • DEFAULT_COLLATION_NAME: डिफ़ॉल्ट कॉलेशन
  • SQL_PATH: SQL पथ (आमतौर पर NULL)

प्रदर्शन

  • INFORMATION_SCHEMA क्वेरी मेटाडेटा लॉक ले सकती हैं
  • बहुत अधिक डेटाबेस (>1000) होने पर धीमी हो सकती हैं
  • नियमित मॉनिटरिंग के लिए कैशिंग पर विचार करें

REGEXP शक्तिशाली पैटर्न मिलान प्रदान करता है लेकिन बड़े मेटाडेटा सेट पर फुल स्कैन करता है।

  1. - MySQL में इंडेक्स के साथ तालिका कैसे बनाएं?

    MySQL में तालिका निर्माण के बाद CREATE INDEX स्टेटमेंट का उपयोग करके इंडेक्स बनाए जा सकते हैं, या तालिका निर्माण के समय परिभाषित किए जा सकते हैं। विधि 1: तालिका निर्माण के बाद CREATE TABLE table_name ( col1 datatype, col2 datatype ); CREATE INDEX index_name1 ON table_name (col1); CREATE IN

  1. - MySQL में सर्वर पर सभी डेटाबेस की सभी टेबल्स पर GRANT SELECT कैसे करें?

    इसके लिए, आप नीचे दिए गए सिंटैक्स में GRANT SELECT स्टेटमेंट का उपयोग कर सकते हैं: GRANT SELECT ON *.* TO yourUserName@yourHostName; सबसे पहले होस्ट के साथ सभी उपयोगकर्ता नाम सूचीबद्ध करें: mysql> select user,host from mysql.user; इससे निम्न आउटपुट प्राप्त होगा: +------------------+-----------+

  1. Java में MySQL PreparedStatement का WHERE क्लॉज के साथ सही उपयोग Java में MySQL PreparedStatement का WHERE क्लॉज के साथ सही उपयोग

    PreparedStatement सिंटैक्स String query = select yourColumnName from yourTableName where name = ?; PreparedStatement ps = (PreparedStatement) con.prepareStatement(query); ps.setString(columnIndex, yourValue); टेबल और डेटा insert into demo37(name) values(John), (Bob), (John), (Chris), (David), (Jo