MySQL 8.0 リファレンスマニュアル


13.1.12 CREATE DATABASE ステートメント

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}

CREATE DATABASE は、指定された名前を持つデータベースを作成します。 このステートメントを使用するには、このデータベースに対する CREATE 権限が必要です。 CREATE SCHEMACREATE DATABASE のシノニムです。

そのデータベースが存在するときに IF NOT EXISTS を指定しなかった場合は、エラーが発生します。

CREATE DATABASE は、アクティブな LOCK TABLES ステートメントを持つセッション内では許可されません。

create_option は、データベース特性を指定します。 データベース特性はデータディクショナリに格納されます。

  • CHARACTER SET オプションは、デフォルトのデータベース文字セットを指定します。 COLLATE オプションは、デフォルトのデータベース照合順序を指定します。 文字セットおよび照合順序名の詳細は、第10章「文字セット、照合順序、Unicode を参照してください。

    使用可能な文字セットと照合順序を確認するには、それぞれ SHOW CHARACTER SET ステートメントと SHOW COLLATION ステートメントを使用します。 セクション13.7.7.3「SHOW CHARACTER SET ステートメント」およびセクション13.7.7.4「SHOW COLLATION ステートメント」を参照してください。

  • MySQL 8.0.16 で導入された ENCRYPTION オプションは、データベースで作成されたテーブルによって継承されるデフォルトのデータベース暗号化を定義します。 許可される値は、'Y' (暗号化有効) および'N' (暗号化無効) です。 ENCRYPTION オプションが指定されていない場合、default_table_encryption システム変数の値によってデフォルトのデータベース暗号化が定義されます。 table_encryption_privilege_check システム変数が有効になっている場合、default_table_encryption 設定とは異なるデフォルトの暗号化設定を指定するには、TABLE_ENCRYPTION_ADMIN 権限が必要です。 詳細は、スキーマおよび一般テーブルスペースの暗号化デフォルトの定義を参照してください。

MySQL でのデータベースは、そのデータベース内のテーブルに対応するファイルを含むディレクトリとして実装されます。 最初の作成時にはデータベースにテーブルがないため、CREATE DATABASE ステートメントでは MySQL データディレクトリの下にディレクトリのみが作成されます。 許可されるデータベース名のルールは、セクション9.2「スキーマオブジェクト名」に示されています。 データベース名に特殊文字が含まれている場合は、セクション9.2.4「識別子とファイル名のマッピング」で説明されているように、その文字のエンコードされたバージョンがデータベースディレクトリの名前に含まれます。

データディレクトリの下にディレクトリを手動で作成することによるデータベースディレクトリの作成 (mkdir などを使用) は、MySQL 8.0 ではサポートされていません。

データベースを作成する場合は、サーバーでディレクトリとその中のファイルを管理します。 データベースディレクトリおよびファイルを直接操作すると、不整合や予期しない結果が発生する可能性があります。

MySQL にはデータベース数の制限はありません。 ベースとなるファイルシステムによっては、ディレクトリ数に制限がある場合があります。

mysqladmin プログラムを使用してデータベースを作成することもできます。 セクション4.5.2「mysqladmin — A MySQL Server 管理プログラム」を参照してください。


関連キーワード:  ステートメント, CREATE, TABLE, データベース, DROP, DATABASE, サブクエリー, FUNCTION, SLAVE, ディレクトリ