MySQLで特定の単語の直後に大文字を含むデータベース名をすべて取得する方法
MySQLで「特定の単語の直後に大文字が含まれるデータベース」を一覧取得したい場合は、information_schema.schemata テーブルに対して REGEXP(正規表現)を使用するのが効果的です。
基本構文
SELECT * FROM information_schema.schemata
WHERE SCHEMA_NAME REGEXP '^yourValue_+[A-Z]';
この正規表現の各要素は次の意味を持っています。
^yourValue:指定した単語で始まること_+:アンダースコア(_)が1回以上続くこと[A-Z]:その直後の文字が英大文字(A〜Z)であること
サンプルデータベースの作成
まず、動作確認用にいくつかのデータベースを作成してみましょう。
mysql> CREATE DATABASE bank_APP1;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE bank_APP2;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE bank_APP3;
Query OK, 1 row affected (0.00 sec)
大文字を含むデータベースを取得するクエリ
ここで、「bank_ の直後に大文字が付くデータベース」をすべて取得するには、次のようにクエリを記述します。
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 | +--------------+-------------+----------------------------+------------------------+----------+ 3 rows in set (0.00 sec)
このように、正規表現の条件に一致した3つのデータベースだけが抽出されました。
注意点
MySQLでは、OSやシステム変数 lower_case_table_names の設定によって、データベース名の大文字・小文字の扱いが異なる場合があります。たとえばWindows環境では識別子が小文字に変換されて保存されることがあるため、[A-Z] を使った正規表現のマッチ結果は実行環境によって変わる可能性がある点に留意してください。
-
MySQLサーバー上のすべてのデータベース・すべてのテーブルにSELECT権限を付与する方法
MySQLですべてのデータベース・すべてのテーブルにSELECT権限を付与するには?MySQLサーバー上のすべてのデータベースのすべてのテーブルに対してSELECT権限を付与したい場合は、GRANT SELECTステートメントを使用します。対象にワイルドカード「*.*」を指定することで、サーバー上の全データベース・全テーブルが一括して権限付与の対象となります。基本構文GRANT SELECT ON *.* TO yourUserName@yourHostName;手順1:既存ユーザーとホストの一覧を確認するまず、mysql.userテーブルを参照して、登録されているユーザー名とホストの一覧を確
-
JavaからMySQLを操作する:WHERE句の条件値にPreparedStatementを正しく使う方法
JavaからMySQLデータベースに対して、WHERE句の条件に変数の値を渡してクエリを実行したい場合、PreparedStatementを使用するのが最も安全かつ確実な方法です。SQLインジェクション対策にもなり、パフォーマンス面でもメリットがあります。基本的な構文は以下の通りです。String anyVariableName = select yourColumnName from yourTableName where name = ?; PreparedStatement ps = (PreparedStatement) con.prepareStatement(yourVariabl