MENU

【MySQL入門】データベースを指定・切り替える方法を初心者向けに解説

MySQLを使い始めたばかりの方が最初につまずくポイントの一つが「どのデータベースに対して操作すればいいの?」という疑問です。この記事では、MySQLで操作対象のデータベースを指定・切り替える方法を、初心者の方にもわかりやすく丁寧に解説します。

目次

MySQLのデータベースとは?

まず基本的な概念を理解しておきましょう。MySQLでは、1つのMySQLサーバーの中に複数のデータベースを作成できます。

例えば、以下のような構成が可能です。

  • myapp_database(アプリケーション用)
  • test_database(テスト用)
  • wordpress_db(WordPress用)

それぞれのデータベースは独立しており、中にテーブルやデータを持っています。SQL文を実行する際は、どのデータベースに対して操作するのかを明確にする必要があります。

データベースを指定する3つの方法

MySQLでデータベースを指定する方法は主に3つあります。状況に応じて使い分けましょう。

方法1: USE文でデータベースを切り替える

最も基本的で、よく使われる方法です。

USE データベース名;

実際の使用例

USE myapp_database;

このコマンドを実行すると、「Database changed」というメッセージが表示されます。以降、SQL文は全てmyapp_databaseに対して実行されます。

USE myapp_database;

-- 以下は全て myapp_database に対する操作になる
SELECT * FROM users;
INSERT INTO products (name, price) VALUES ('商品A', 1000);
UPDATE orders SET status = 'completed' WHERE id = 1;

USE文のメリット

  • シンプルでわかりやすい
  • 一度指定すれば、その後の全てのSQL文に適用される
  • コマンドラインでもGUIツールでも使える

USE文を使うタイミング

  • MySQL接続後、最初に実行する
  • 別のデータベースに切り替えたいとき
  • 単一のデータベースで作業する場合

方法2: 接続時にデータベースを指定する

MySQL接続時に、最初から使用するデータベースを指定できます。この方法なら、接続後すぐに作業を開始できます。

コマンドラインから接続する場合

mysql -u ユーザー名 -p データベース名

具体例:

mysql -u root -p myapp_database

パスワードを入力すると、myapp_databaseが選択された状態でMySQLに接続されます。USE文を実行する必要はありません。

ホスト名も指定する場合

mysql -h ホスト名 -u ユーザー名 -p データベース名

具体例:

mysql -h localhost -u admin -p production_db

リモートサーバーに接続する際は-hオプションでホスト名を指定します。

プログラムから接続する場合

アプリケーション開発では、接続時にデータベースを指定するのが一般的です。

PHP(PDO)の場合:

<?php
try {
    $pdo = new PDO(
        'mysql:host=localhost;dbname=myapp_database;charset=utf8mb4',
        'username',
        'password'
    );
    echo "接続成功!";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>

DSN(Data Source Name)の中にdbname=myapp_databaseと記述することで、データベースを指定します。

Python(mysql-connector-python)の場合:

import mysql.connector

# 接続設定
config = {
    'host': 'localhost',
    'user': 'username',
    'password': 'password',
    'database': 'myapp_database'
}

# 接続
conn = mysql.connector.connect(**config)
cursor = conn.cursor()

# クエリ実行
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()

# 接続を閉じる
cursor.close()
conn.close()

databaseパラメータで使用するデータベースを指定します。

Node.js(mysql2)の場合:

const mysql = require('mysql2');

// 接続設定
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'myapp_database'
});

// 接続
connection.connect((err) => {
  if (err) {
    console.error('接続エラー:', err);
    return;
  }
  console.log('接続成功!');
});

// クエリ実行
connection.query('SELECT * FROM users', (err, results) => {
  if (err) throw err;
  console.log(results);
});

// 接続を閉じる
connection.end();

Ruby(mysql2 gem)の場合:

require 'mysql2'

# 接続
client = Mysql2::Client.new(
  host: 'localhost',
  username: 'username',
  password: 'password',
  database: 'myapp_database'
)

# クエリ実行
results = client.query("SELECT * FROM users")
results.each do |row|
  puts row
end

# 接続を閉じる
client.close

接続時指定のメリット

  • USE文を実行する手間が省ける
  • 接続後すぐにデータベース操作ができる
  • アプリケーション開発では標準的な方法

方法3: テーブル名にデータベース名を含める

USE文を使わずに、SQL文の中で直接データベース名を指定する方法です。

SELECT * FROM データベース名.テーブル名;

実際の使用例

-- データベースを指定せずに、テーブル名だけでアクセス
SELECT * FROM myapp_database.users;

-- 別のデータベースのテーブルも同時に操作できる
INSERT INTO myapp_database.products (name, price) VALUES ('商品A', 1000);
SELECT * FROM test_database.sample_data;

複数データベースを同時に扱う例

この方法の真価は、複数のデータベースを同時に操作できることです。

-- 本番データベースとテストデータベースのデータを比較
SELECT 
    p.product_name,
    p.price AS production_price,
    t.price AS test_price
FROM production_db.products p
JOIN test_db.products t ON p.id = t.id
WHERE p.price <> t.price;

-- 異なるデータベース間でデータをコピー
INSERT INTO backup_db.users 
SELECT * FROM main_db.users 
WHERE created_at >= '2025-01-01';

この方法のメリット

  • 複数のデータベースを横断してクエリを実行できる
  • どのデータベースを操作しているか明確
  • データベース移行やバックアップ作業で便利

この方法のデメリット

  • 毎回データベース名を書く必要があり、コードが長くなる
  • タイプミスのリスクが増える

現在使用中のデータベースを確認する方法

作業中に「今どのデータベースを使っているんだっけ?」と迷ったときは、以下のコマンドで確認できます。

SELECT DATABASE();

実行結果の例:

+------------------+
| DATABASE()       |
+------------------+
| myapp_database   |
+------------------+

データベースが選択されていない場合はNULLが返されます。

+------------------+
| DATABASE()       |
+------------------+
| NULL             |
+------------------+

この状態でテーブル操作を試みると、「No database selected」というエラーが出ます。

利用可能なデータベースの一覧を表示する

MySQLサーバーにどんなデータベースがあるかを確認するには:

SHOW DATABASES;

実行結果の例:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| myapp_database     |
| performance_schema |
| sys                |
| test_database      |
+--------------------+

ここに表示されるデータベースに対してアクセス権限があれば、USE文で切り替えて使用できます。

システムデータベースについて

結果に含まれる以下のデータベースは、MySQL自身が管理に使用するシステムデータベースです。

  • information_schema: データベースのメタ情報
  • mysql: ユーザー権限などの管理情報
  • performance_schema: パフォーマンス監視用
  • sys: システム情報の参照用ビュー

通常の業務では直接触ることはありませんが、存在は知っておきましょう。

実務での使い分けガイド

状況に応じて、最適な方法を選びましょう。

コマンドラインで作業する場合

1つのデータベースだけ使う場合:

# 接続時に指定する方が楽
mysql -u root -p myapp_database

または

# 接続後にUSEで切り替え
mysql -u root -p

USE myapp_database;

複数のデータベースを切り替える場合:

-- USE文で切り替えながら作業
USE myapp_database;
SELECT COUNT(*) FROM users;

USE test_database;
SELECT COUNT(*) FROM test_users;

複数のデータベースを同時に扱う場合:

-- テーブル名にデータベース名を含める
SELECT * FROM myapp_database.users 
WHERE id IN (SELECT user_id FROM test_database.access_logs);

アプリケーション開発の場合

プログラムからMySQLに接続する際は、接続時にデータベースを指定するのが一般的です。

// 推奨: 接続時に指定
$pdo = new PDO('mysql:host=localhost;dbname=myapp_database', 'user', 'pass');

// 非推奨: 接続後にUSE文を実行
$pdo = new PDO('mysql:host=localhost', 'user', 'pass');
$pdo->exec('USE myapp_database');

理由:

  • コードがシンプルになる
  • 接続プールを使う場合の動作が安定する
  • フレームワークの設定ファイルで一元管理できる

データベース移行・バックアップ作業の場合

-- テーブル名にデータベース名を含めると便利
CREATE TABLE backup_db.users_backup AS 
SELECT * FROM production_db.users;

-- 複数データベース間のデータ比較
SELECT 
    'production' AS env, 
    COUNT(*) AS user_count 
FROM production_db.users
UNION ALL
SELECT 
    'staging' AS env, 
    COUNT(*) AS user_count 
FROM staging_db.users;

よくあるエラーと対処法

エラー1: No database selected

ERROR 1046 (3D000): No database selected

原因: データベースが選択されていない状態でテーブルにアクセスしようとした

解決方法:

USE myapp_database;

または、テーブル名にデータベース名を含める:

SELECT * FROM myapp_database.users;

エラー2: Unknown database

ERROR 1049 (42000): Unknown database 'myapp_database'

原因: 指定したデータベースが存在しない、または名前が間違っている

解決方法:

  1. データベース名を確認:
SHOW DATABASES;

  1. 必要に応じてデータベースを作成:
CREATE DATABASE myapp_database;

エラー3: Access denied for user

ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'myapp_database'

原因: 指定したユーザーにデータベースへのアクセス権限がない

解決方法: データベース管理者に権限付与を依頼するか、適切な権限を持つユーザーで接続する

-- 管理者が実行する権限付与の例
GRANT ALL PRIVILEGES ON myapp_database.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

データベース選択のベストプラクティス

1. 接続時に必ずデータベースを指定する

アプリケーションでは、接続設定でデータベース名を明示的に指定しましょう。

# Good: 明確
config = {
    'host': 'localhost',
    'user': 'app_user',
    'password': 'secure_password',
    'database': 'myapp_database'  # 明示的に指定
}

2. 環境ごとに異なるデータベースを使う

開発環境、ステージング環境、本番環境でデータベースを分けることで、誤って本番データを操作するリスクを減らせます。

development_db  # 開発用
staging_db      # テスト用
production_db   # 本番用

環境変数で切り替えられるようにすると便利です:

import os

database_name = os.environ.get('DB_NAME', 'development_db')

3. 定期的に現在のデータベースを確認する

長時間作業する場合、定期的に確認する習慣を:

SELECT DATABASE();

4. スクリプトには必ずUSE文を含める

SQLスクリプトファイルの先頭には、必ずUSE文を書きましょう。

-- migration_001.sql
USE myapp_database;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL
);

これにより、どのデータベースに対する操作か明確になり、誤実行を防げます。

まとめ

MySQLでデータベースを指定・切り替える方法について解説しました。

3つの方法のおさらい

  1. USE文で切り替える – 最も基本的で汎用的な方法
  2. 接続時に指定する – アプリケーション開発での標準的な方法
  3. テーブル名に含める – 複数データベースを扱う際に便利

重要なポイント

  • データベースを指定せずにテーブル操作するとエラーになる
  • SELECT DATABASE();で現在のデータベースを確認できる
  • SHOW DATABASES;で利用可能なデータベース一覧を表示できる
  • 状況に応じて最適な方法を使い分ける
  • スクリプトには必ずUSE文を含める

データベースの選択は、MySQL操作の基本中の基本です。この記事で紹介した方法をマスターして、安全で効率的なデータベース操作を行いましょう。

実際に手を動かして練習することで、より深く理解できます。まずはテスト用のデータベースを作成して、色々な方法を試してみてください!

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次