Vấn đề: Lọc tên database theo pattern: tiền tố + chữ in hoa
Cần tìm các database có tên bắt đầu bằng 'bank_' theo sau là chữ in hoa (ví dụ: bank_APP1, bank_APP2).
Giải pháp: REGEXP trên information_schema.schemata
Bảng hệ thống information_schema.schemata cột SCHEMA_NAME lưu tên database.
1. Tạo database test
CREATE DATABASE bank_APP1;
CREATE DATABASE bank_APP2;
CREATE DATABASE bank_APP3;
2. Truy vấn REGEXP
SELECT * FROM information_schema.schemata
WHERE SCHEMA_NAME REGEXP '^bank_+[A-Z]';
3. Giải thích regex
^– Bắt đầu chuỗi.bank_– Chuỗi cố định 'bank_'.+– Quantifier: ký tự trước ('_') xuất hiện 1 hoặc nhiều lần. Lưu ý: Pattern gốc'^bank_+[A-Z]'khớp 'bank_APP1' (một '_'), 'bank__APP1' (hai '_')...[A-Z]– Một chữ cái in hoa A-Z.
4. Kết quả
+--------------+-------------+----------------------------+------------------------+----------+
| 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 |
+--------------+-------------+----------------------------+------------------------+----------+
Lưu ý: MySQL mặc định collation utf8_general_ci hoặc utf8mb4_0900_ai_ci – không phân biệt chữ hoa/thường. Do đó REGEXP '[A-Z]' cũng khớp 'app1' (chữ thường). Kết quả hiển thị tên database lowercase.
Để phân biệt chữ hoa/thường (Case-sensitive)
- Dùng collation case-sensitive:
WHERE SCHEMA_NAME COLLATE utf8mb4_bin REGEXP '^bank_+[A-Z]'. - Hoặc MySQL 8.0+:
REGEXP BINARY(nếu hỗ trợ).
Cách thực tế hơn: Tìm database có tiền tố 'bank_' (bất kỳ chữ cái sau)
SELECT SCHEMA_NAME FROM information_schema.schemata
WHERE SCHEMA_NAME LIKE 'bank\_%' ESCAPE '\\';
Dùng LIKE với escape \_ (dấu gạch dưới là wildcard trong LIKE).