কম্পিউটার টিউটোরিয়াল

MySQL-এ রেগুলার এক্সপ্রেশন দিয়ে নির্দিষ্ট প্যাটার্নের ডেটাবেস খুঁজে বের করা

information_schema.schemata টেবিলে REGEXP ব্যবহার করে ডেটাবেস নামের প্যাটার্ন ম্যাচ করে খুঁজে বের করা যায়। নিচে bank_ প্রিফিক্সের পর বড় হাতের অক্ষর (A-Z) থাকা ডেটাবেস খুঁজে বের করার উদাহরণ দেওয়া হলো।

সিনট্যাক্স

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

নমুনা ডেটাবেস তৈরি

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

কোয়েরি: 'bank_' এর পর বড় হাতের অক্ষর থাকা ডেটাবেস

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

রেজেক্স ব্যাখ্যা:

  • ^bank_ — 'bank_' দিয়ে শুরু।
  • + — এক বা একাধিক আন্ডারস্কোর (যদি 'bank__APP' হয়)।
  • [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     |
+--------------+-------------+----------------------------+------------------------+----------+

কেস-ইনসেনসিটিভ ম্যাচ (MySQL ডিফল্ট)

MySQL-এ REGEXP ডিফল্টভাবে কেস-ইনসেনসিটিভ (collation पर নির্ভর করে)। কেস-সংবেদনশীল ম্যাচ করতে:

WHERE SCHEMA_NAME REGEXP '^bank_+[A-Z]' COLLATE utf8mb4_bin

অন্যান্য রেজেক্স উদাহরণ

প্যাটার্নম্যাচ করবে
^test_'test_' দিয়ে শুরু
_dev$'_dev' দিয়ে শেষ
^app_[0-9]+$'app_' এবং তারপর শুধু সংখ্যা
^(prod|staging)_'prod_' বা 'staging_' দিয়ে শুরু

সতর্কতা

REGEXP ফুল টেবিল স্ক্যান করে। ডেটাবেস সংখ্যা কম থাকলে সমস্যা নেই, কিন্তু হাজার হাজার ডেটাবেস থাকলে পারফরম্যান্স বিবেচনা করুন।

  1. MySQL-এ ব্যাকটিকস (`) ব্যবহার করে সংখ্যাসূচক ডাটাবেস নাম তৈরি করুন

  2. MySQL-ে ইনডেক্সসহ টেবিল তৈরি করা (CREATE INDEX)

  3. MySQL에서 GRANT SELECT ON *.*로 모든 데이터베이스 모든 테이블 읽기 권한 주기

  4. Java-এ MySQL PreparedStatement ব্যবহার করে WHERE শর্তে মান পাস করা