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 ফুল টেবিল স্ক্যান করে। ডেটাবেস সংখ্যা কম থাকলে সমস্যা নেই, কিন্তু হাজার হাজার ডেটাবেস থাকলে পারফরম্যান্স বিবেচনা করুন।