MySQL データベースの作成と削除
MySQLにおいて、データベース(Database)は、関連するデータテーブルやビュー、ストアドプロシージャ、関数などのオブジェクトを格納するための大きなコンテナ(容器)のような役割を果たします。テーブルを作成してデータを保存する前に、まずそれらを収容するためのデータベースを作成する必要があります。
本章では、新しいデータベースの作成と既存のデータベースの削除に使用する基本的な SQL コマンドについて紹介します。
1. データベースの作成
MySQLで新しいデータベースを作成するには、CREATE DATABASE ステートメントを使用します。このコマンドを実行すると、MySQLサーバー上に新しいスキーマ(Schema)が割り当てられ、その中にデータテーブルを定義して保存できるようになります。
管理を容易にするために、通常は保存するデータの内容を反映した、デスクリプション(記述的)な名前をデータベースに付けることが推奨されます。
1.1 基本的な作成ステートメント
最もシンプルな CREATE DATABASE ステートメントは、データベースの名前を指定するだけです。
CREATE DATABASE データベース名;例えば、オンライン小売ビジネスに関連する情報を保存するために、ecommerce_platform(ECプラットフォーム)という名前のデータベースを作成する場合は以下のようになります。
CREATE DATABASE ecommerce_platform;このコマンドは、完全に新しく空のデータベースを作成します。以降、このプロジェクトに関するすべてのテーブル作成やデータ挿入操作は、この ecommerce_platform データベース内で行われることになります。
1.2 IF NOT EXISTS によるエラー防止
既に存在する名前のデータベースを作成しようとすると、MySQLはエラーをスローします。これを防ぐために、IF NOT EXISTS 句を使用することができます。
この句はMySQLに対し、「指定された名前のデータベースが存在しない場合のみ作成せよ」と指示します。既に存在する場合、コマンドは何もしのせず、エラーも発生させません。
CREATE DATABASE IF NOT EXISTS データベース名;ecommerce_platform を例に見てみましょう。以下のコマンドを複数回実行した場合、最初の実行でデータベースが作成され、それ以降の IF NOT EXISTS 付きの実行ではエラーが発生しません。
CREATE DATABASE IF NOT EXISTS ecommerce_platform; -- 存在しない場合は作成
CREATE DATABASE IF NOT EXISTS ecommerce_platform; -- 既に存在するため、何もしない(エラーなし)これは、オートメーションスクリプトやデプロイプログラムを記述する際に非常に有用です。データベースが既に作成済みかどうかが不明なシーンで役立ちます。
1.3 文字セットと照合順序の指定
データベース作成時に、文字セット(Character Set)と照合順序(Collation)を併せて指定することも可能です。
- 文字セット: データベースに保存できる文字の集合を定義します(例:国際的な文字に対応する UTF-8)。
- 照合順序: これらの文字を比較およびソート(並べ替え)するためのルールを定義します(例:大文字と小文字を区別するかどうか)。
CREATE DATABASE データベース名
CHARACTER SET 文字セット名
COLLATE 照合順序名;現代のほとんどのアプリケーションでは、文字セットとして utf8mb4 を使用し、照合順序として utf8mb4_unicode_ci または utf8mb4_0900_ai_ci を使用することが強く推奨されます。
- 従来の
utf8と比較して、utf8mb4は絵文字(Emoji)を含むより広範な文字をサポートしています。 _unicode_ciは Unicode に基づく大文字小文字を区別しない(Case-Insensitive)強力な比較ルールを提供します。_0900_ai_ciは、MySQL 8.0 以上で提供される、より新しく正確な Unicode 照合順序です。
文字セットと照合順序を指定したデータベース作成の例:
CREATE DATABASE project_management
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;これにより、project_management データベース内に保存されるすべてのデータが、さまざまな国際文字を正しく処理し、指定されたルールに従ってソートされることが保証されます。異なる言語のユーザー入力を扱う場合や、レポート生成のために正確なテキストソートが必要な場合に非常に重要です。
2. データベースの削除
既存のデータベースとそのすべてのコンテンツ(テーブル、データ、ビューなど)を削除するには、DROP DATABASE ステートメントを使用します。
警告: これは破壊的な操作であり、使用には細心の注意が必要です。一度データベースが削除されると、バックアップがない限り、データを簡単に復旧することはできません。
2.1 基本的な削除ステートメント
データベースを削除する基本構文は非常にシンプルです。
DROP DATABASE データベース名;もし ecommerce_platform データベースが不要になった場合は、次のように削除できます。
DROP DATABASE ecommerce_platform;このコマンドにより、ecommerce_platform データベース、およびその中のすべてのテーブルとデータが永久に削除されます。
2.2 IF EXISTS によるエラー防止
作成時と同様に、存在しないデータベースを削除しようとするとエラーが発生します。この問題を避けるために、IF EXISTS 句を使用できます。
この句を使用することで、DROP DATABASE コマンドは指定されたデータベースが確実に存在する場合にのみ実行されます。存在しない場合、コマンドは無視され、エラーは発生しません。
DROP DATABASE IF EXISTS データベース名;ecommerce_platform の例を使用すると以下のようになります。
DROP DATABASE IF EXISTS ecommerce_platform; -- 存在すれば削除
DROP DATABASE IF EXISTS ecommerce_platform; -- 既に存在しないため、何もしない(エラーなし)システムの堅牢性を確保し、アプリケーションのデプロイやメンテナンスプロセスにおける不要なエラーを防ぐために、スクリプトやオートメーションフローを作成する際は、この句を使用することを強く推奨します。
2.3 実際のシナリオ:開発環境のクリーンアップ
ソフトウェア開発チームが複数のプロジェクトを並行して進めているシーンを想像してください。各プロジェクトには、テストや開発用の独自のデータベースがあるかもしれません。プロジェクトが完了したり、特定の開発ブランチがマージされたりすると、関連する開発用データベースは不要になります。
DROP DATABASE IF EXISTS を使用することで、開発者はデータベースが既に削除されているか、あるいは最初から作成されていなかったかを心配することなく、ローカル環境やテスト環境を安全にクリーンアップできます。
例えば、チームが new_user_onboarding(新規ユーザーオンボーディング)という機能を開発している場合、そのためのテンポラリ(一時的)なデータベースを作成するかもしれません。
CREATE DATABASE new_user_onboarding_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-- ... このデータベース内でテーブルの開発とテストを実施 ...機能のデプロイが完了すれば、開発用データベースは安全に削除できます。
DROP DATABASE IF EXISTS new_user_onboarding_dev;これにより、サーバー上に古い開発用データベースが蓄積されるのを防ぎ、環境をクリーンに保つことができます。
3. 実戦デモ (MySQL Workbench 操作)
MySQL Workbench を使用して、一連の流れをデモしてみましょう。
1. MySQL Workbench を開いて接続: MySQLサーバーインスタンスに接続されていることを確認します。
2.「図書管理システム」用の新しいデータベースを作成: library_db という名前のデータベースを作成します。
-- 図書管理システム用のデータベースを作成
CREATE DATABASE IF NOT EXISTS library_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;このクエリを実行します。「Query executed successfully(クエリが正常に実行されました)」というメッセージが表示されるはずです。Workbench左側の「Schemas(スキーマ)」ナビゲーターをリフレッシュすると、library_db が表示されます。
3. 同じデータベースを再度作成してみる(IF NOT EXISTS なし): CREATE DATABASE library_db; を再度実行しようとすると、データベースが既に存在するためエラーが発生します。
4.「ブログプラットフォーム」用の別のデータベースを作成: 次に、シンプルなブログアプリケーション用のデータベースを作成します。
-- ブログプラットフォーム用のデータベースを作成
CREATE DATABASE IF NOT EXISTS blog_platform;このクエリを実行し、「Schemas」ナビゲーターをリフレッシュして blog_platform が表示されることを確認します。
5. 「ブログプラットフォーム」データベースを削除: ブログプロジェクトがキャンセルされたと仮定し、そのデータベースを削除します。
-- blog_platform データベースを削除
DROP DATABASE IF EXISTS blog_platform;このクエリを実行して「Schemas」ナビゲーターをリフレッシュすると、blog_platform が消えているはずです。
6. 存在しないデータベースを削除してみる(IF EXISTS なし):DROP DATABASE non_existent_db; を実行しようとするとエラーが発生します。
7. 「図書管理システム」データベースを削除: 最後に library_db も削除します。
-- library_db データベースを削除
DROP DATABASE IF EXISTS library_db;このクエリを実行すると、library_db も消去されます。
これらの手順は、データベースの作成と削除のライフサイクル全体を示しており、信頼性の高いスクリプトを作成する上での IF NOT EXISTS および IF EXISTS の重要性を強調しています。