はじめに
MySQL は、管理するデータをテーブルとデータベース内に保持します。テーブルは、カラムとデータ型の事前定義されたスキーマ内にデータを格納します。データベースは、複数のテーブル、インデックス、プロシージャを保持し、特権やカスタマイズなどのスコープを定義するのに役立つ構造です。
このガイドでは、MySQL でテーブルとデータベースを作成する方法を説明します。両方の構造のいくつかの機能を管理する方法を示し、不要になった場合にそれらを削除してクリーンアップする方法を説明します。
前提条件
このガイドに沿って進めるには、mysql
コマンドラインクライアントを使用して、管理権限を持つユーザーで MySQL サーバーにログインする必要があります。
root
MySQL 管理アカウントでログインしたくない場合は、このガイドに記載されているアクションを実行するために、少なくともCREATE
権限が必要です。
ユーザーが利用可能な権限は、以下を入力することで確認できます。
SHOW GRANTS\G
新しいデータベースを作成するには?
まず、新しいデータベースの作成方法を説明します。MySQL では、データベースには通常、単一のプロジェクトに関連するテーブル、インデックス、プロシージャ、およびその他のリソースが含まれます。これらのリソースはすべてデータベース内に作成する必要があるため、新しいデータベースの作成方法を学ぶことは良い第一歩となります。
新しいデータベースを作成するための基本的な構文は次のとおりです。
CREATE DATABASE <db_name>;
コマンドを実行する前に、<db_name>
をデータベースに付けたい名前に置き換えてください。このコマンドは、指定された名前でデータベースを作成し、現在のユーザーを新しいデータベースの所有者として設定します。
データベースは、文字セット、照合順序、および暗号化プロパティにシステム全体でのデフォルト値を使用します。
- CHARACTER SET: 新しいデータベースの文字セットを設定します。これは、どの文字が大文字、小文字、数字と見なされるかに影響するローカライズオプションです。
- COLLATE: データベースの照合順序、つまりソート順を設定します。これは、アイテムが順序付けられたときにどのように整理されるかを決定するローカライズオプションです。
- ENCRYPTION: 新しいデータベースの暗号化を設定します。これはブールオプションで、はいの場合は 'Y'、いいえの場合は 'N' です。
インストールで利用可能な文字セットは、以下を入力することで確認できます。
SHOW CHARACTER SET;
同様に、利用可能な照合順序は、以下を入力することで確認できます。
SHOW COLLATION;
これらのパラメータのいずれかにデフォルト以外の値を指定したい場合は、メインの作成ステートメントの後に次のように追加することで指定できます。
CREATE DATABASE <db_name>CHARACTER SET = 'utf8mb4'COLLATE = 'utf8mb4_0900_ai_ci'ENCRYPTION = 'Y';
このガイドの例に沿って進めるために、インスタンスのデフォルトロケール設定と UTF8 文字セットを使用して、school
という名前のデータベースを作成します。
CREATE DATABASE school CHARACTER SET = 'utf8mb4';
これにより、指定した仕様を使用して新しいデータベースが作成されます。
既存のデータベースを一覧表示する
サーバーで利用可能なデータベースを一覧表示するには、以下を入力します。
SHOW DATABASES;
これにより、環境内で現在定義されている各データベースが一覧表示されます。
+--------------------+Database |+--------------------+information_schema |mysql |performance_schema |school |sys |testing |+--------------------+6 rows in set (0.00 sec)
指定した設定が新しい school
データベースに適用されたことを確認するには、SHOW CREATE DATABASE
コマンドを使用します。
SHOW CREATE DATABASE school;
出力には、データベースの作成に使用されたコマンドとオプションが表示され、適用されたデフォルト値でオプションが埋められます。
+----------+----------------------------------------------------------------------------------------------------------------------------------+Database | Create Database |+----------+----------------------------------------------------------------------------------------------------------------------------------+school | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |+----------+----------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
MySQL で別のデータベースに切り替える方法
データベースが作成されたら、いくつかの異なる方法で作業できます。
最初のオプションは、使用するすべてのコマンドでデータベースを引数として指定することです。ただし、データベースのオブジェクトに関連する複数のコマンドを実行する場合は、時間を節約するために、データベースを「切り替え」たり「使用」したりして、実行するデータベース関連コマンドのデフォルトコンテキストとして新しいデータベースを設定することもできます。
別のデータベースに切り替えるには、以下を入力します。
USE <db_name>;
私たちの場合、作成した school
データベースに、以下を入力することで切り替えることができます。
USE school;
データベース内にテーブルを作成する
データベースを作成したら、その中にテーブルやその他のオブジェクトを定義してデータを保存・管理できます。MySQL では、テーブルはテーブル名、カラム定義(これには名前、データ型、制約などが含まれます)、およびテーブルオプションで構成されます。
MySQL の CREATE TABLE
コマンドの構文は?
MySQL の CREATE TABLE
コマンドを使用してテーブルを作成する基本的な構文は次のとおりです。
CREATE TABLE <table_name> (<column_name> <data_type> [<column_constraint>],[<table_constraint>,]);
上記のコマンドテンプレートは、次のコンポーネントに分解できます。
CREATE TABLE <table_name>
: 基本的な作成ステートメントです。<table_name>
プレースホルダーは、使用したいテーブル名に置き換える必要があります。<column_name> <data_type>
: テーブル内の基本的なカラムを定義します。<column_name>
プレースホルダーは、カラムに使用したい名前に置き換える必要があります。<data_type>
は、カラムのMySQL データ型を指定します。テーブル内に格納されるデータは、受け入れられるためにはカラム構造とカラムデータ型に適合している必要があります。<column_constraint>
: カラム制約は、データに追加の要件を追加するオプションの制約です。たとえば、エントリが null でないこと、一意であること、または正の整数であることを要求できます。<table_constraint>
: テーブル制約はカラム制約に似ていますが、複数のカラムの相互作用を含みます。たとえば、テーブル内でDATE_OF_BIRTH
がDATE_OF_DEATH
より前であることをチェックするテーブル制約を持つことができます。
テーブルがまだ存在しない場合にのみ作成するには?
MySQL のデフォルトの動作では、既に存在するテーブルを作成しようとするとエラーが発生します。ただし、この動作を上書きするために、オプションの IF NOT EXISTS
句を作成ステートメントに追加できます。
CREATE TABLE
句の後、テーブル名の前に IF NOT EXISTS
句をコマンドに挿入することで使用できます。
CREATE TABLE IF NOT EXISTS table_name (column_name TYPE [column_constraint],[table_constraint,]);
これにより、コマンドの動作は次のように変更されます。指定されたテーブル名が既に存在する場合、MySQL はエラーではなく警告を生成します。コマンドの残りの動作は同じです。
MySQL データベース内にテーブルを作成する
上記のコマンドテンプレートは、基本的なテーブルを作成するのに十分です。さらに例を進めるために、school
データベースに2つのテーブルを作成します。1つは supplies
、もう1つは teachers
とします。
supplies
テーブルには、以下のフィールドを含めます。
- id: 各学校用品タイプの一意のID。
- name: 特定の学校用品の名前。
- description: アイテムの短い説明。
- manufacturer: アイテムの製造元の名前。
- color: アイテムの色。
- inventory: 特定の学校用品の在庫数。これは0未満であってはなりません。
上記の特性を持つ supplies
テーブルを以下の SQL を使用して作成できます。
CREATE TABLE supplies (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255),description VARCHAR(255),manufacturer VARCHAR(255),color VARCHAR(255),inventory INT CHECK (inventory >= 0));
これにより、school
データベース内に supplies
テーブルが作成されます。PRIMARY KEY
カラム制約は、テーブル内でレコードを一意に識別できるカラムを示すために使用される特別な制約です。そのため、この制約は、カラムが null であってはならず、一意である必要があることを指定します。MySQL は、クエリ速度を向上させるために主キーカラムにインデックスを作成します。
新しいテーブルが存在することを確認するには、以下を入力します。
SHOW TABLES;
+------------------+Tables_in_school |+------------------+supplies |+------------------+1 row in set (0.01 sec)
スキーマが定義を反映していることを確認するには、以下を入力します。
SHOW CREATE TABLE supplies\G
*************************** 1. row ***************************Table: suppliesCreate Table: CREATE TABLE `supplies` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`description` varchar(255) DEFAULT NULL,`manufacturer` varchar(255) DEFAULT NULL,`color` varchar(255) DEFAULT NULL,`inventory` int DEFAULT NULL,PRIMARY KEY (`id`),CONSTRAINT `supplies_chk_1` CHECK ((`inventory` >= 0))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec
指定したカラム、データ型、および制約は出力に表示されますが、順序や表示が異なる場合があります。
次に、teachers
テーブルを作成します。このテーブルには、以下のカラムが存在する必要があります。
- id: 一意の従業員識別番号。
- first_name: 教師のファーストネーム。
- last_name: 教師のラストネーム。
- subject: 教師が担当する科目。
- grade_level: 教師が担当する生徒の学年。
上記のスキーマを持つ teachers
テーブルを以下の SQL で作成します。
CREATE TABLE teachers (id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(255),last_name VARCHAR(255),subject VARCHAR(255),grade_level INT);
主キーと外部キーを持つテーブルを作成する方法
主キーと外部キーを持つテーブルの作成に関する情報は、他の MySQL ガイドで確認できます。主キーと外部キーはどちらも MySQL 内のデータベース制約の一種です。
主キーは、同じテーブル内の行全体で一意であることが保証されている特殊なカラムまたはカラム群です。すべての主キーは、特定の行を一意に識別するために使用できます。主キーは、各行が主キーカラムに一意の値を持つことを保証するだけでなく、どの行もそのカラムに NULL
値を含まないことも保証します。多くの場合、MySQL の主キーは、自動的に割り当てられる増分主キーを指定するために、次の形式を使用します: id INT AUTO_INCREMENT PRIMARY KEY
。
外部キーは、あるテーブルのカラムまたはカラム群が別のテーブルに含まれる値と一致することを保証する方法です。これは、テーブル間の参照整合性を保証するのに役立ちます。
MySQL でテーブルを表示する方法
MySQL では、探している情報に応じて、いくつかの異なる方法でテーブルを一覧表示できます。
データベース内で利用可能なテーブルを確認したい場合は、以下を入力します。
SHOW TABLES;
+------------------+Tables_in_school |+------------------+supplies |teachers |+------------------+2 rows in set (0.00 sec)
テーブルのスキーマが指定と一致することも確認できます。
DESCRIBE teachers;
+--------------+--------------+------+-----+---------+----------------+Field | Type | Null | Key | Default | Extra |+--------------+--------------+------+-----+---------+----------------+id | int | NO | PRI | NULL | auto_increment |name | varchar(255) | YES | | NULL | |description | varchar(255) | YES | | NULL | |manufacturer | varchar(255) | YES | | NULL | |color | varchar(255) | YES | | NULL | |inventory | int | YES | | NULL | |+--------------+--------------+------+-----+---------+----------------+6 rows in set (0.00 sec)
teachers
テーブルは私たちの定義と一致しているようです。
ALTER TABLE
コマンドでテーブルを変更する方法
MySQL で既存のテーブルのスキーマを変更する必要がある場合は、ALTER TABLE
コマンドを使用できます。ALTER TABLE
コマンドは CREATE TABLE
コマンドと非常によく似ていますが、既存のテーブルに対して操作を行います。
ALTER TABLE 構文
MySQL でテーブルを変更するための基本的な構文は次のとおりです。
ALTER TABLE <table_name> <change_command> <change_parameters>;
<change_command>
は、テーブルに異なるオプションを設定したり、カラムを追加または削除したり、型や制約を変更したりするなど、実行したい変更の正確な種類を示します。コマンドの <change_parameters>
部分には、MySQL が変更を完了するために必要な追加情報が含まれます。
テーブルにカラムを追加する
MySQL テーブルにカラムを追加するには、ADD
変更コマンドを使用できます。変更パラメータには、CREATE TABLE
コマンドで指定するのと同様に、カラム名、型、およびオプションが含まれます。
たとえば、some_table
という名前のテーブルに、text
型の missing_column
というカラムを追加するには、以下のように入力します。
ALTER TABLE some_table ADD missing_column text;
テーブルからカラムを削除する
代わりに、既存のカラムを削除したい場合は、DROP COLUMN
コマンドを使用できます。変更パラメータとして削除したいカラムの名前を指定する必要があります。
ALTER TABLE some_table DROP COLUMN useless_column;
カラムのデータ型を変更する
カラムのデータ型を変更するには、ALTER COLUMN
変更コマンドを MODIFY COLUMN
カラムコマンドと併用できます。このコンテキストのパラメータには、カラム名とその新しい型が含まれます。
ALTER TABLE resident MODIFY COLUMN id INT;
その他のテーブル変更
他の多くの種類の変更は、ALTER TABLE
コマンドで実現できます。利用可能なオプションの詳細については、MySQL の公式ドキュメントで ALTER TABLE
を確認してください。
テーブルを削除する
テーブルを削除したい場合は、DROP TABLE
SQL ステートメントを使用できます。これにより、テーブルとその中に保存されているすべてのデータが削除されます。
基本的な構文は次のとおりです。
DROP TABLE <table_name>;
これにより、テーブルが存在すれば削除され、テーブル名が存在しない場合はエラーがスローされます。
テーブルが存在すれば削除し、存在しない場合は何もしないようにしたい場合は、ステートメントに IF EXISTS
修飾子を含めることができます。
DROP TABLE IF EXISTS <table_name>;
他のテーブルやオブジェクトに依存関係を持つテーブルは、それらの依存関係が存在する間はデフォルトで削除できません。
以前に作成した supplies
テーブルを、以下を入力して削除します。
DROP TABLE supplies;
データベースを削除するステートメントがテーブルのようなすべての子オブジェクトも削除することを示すために、teachers
テーブルは保持します。
データベースを削除する
DROP DATABASE
ステートメントは、MySQL に指定されたデータベースを削除するように指示します。基本的な構文は次のとおりです。
DROP DATABASE <database_name>;
<database_name>
プレースホルダーを、削除したいデータベースの名前に置き換えてください。これにより、データベースが見つかった場合は削除されます。データベースが見つからない場合はエラーが発生します。
DROP DATABASE some_database;
ERROR 1008 (HY000): Can't drop database 'some_database'; database doesn't exist
データベースが存在すれば削除し、それ以外の場合は何もしないようにしたい場合は、オプションの IF EXISTS
オプションを含めます。
DROP DATABASE IF EXISTS some_database;
Query OK, 0 rows affected, 1 warning (0.00 sec)
これにより、データベースが削除されるか、見つからない場合は何も行われません。
このガイドで使用した school
データベースを削除するには、システム上の既存のデータベースを一覧表示します。
SHOW DATABASES;
+--------------------+Database |+--------------------+information_schema |mysql |performance_schema |school |sys |testing |+--------------------+6 rows in set (0.00 sec)
以下のコマンドで school
データベースを削除します。
DROP DATABASE school;
これにより、school
データベースが、その中に定義された teachers
テーブルとともに削除されます。
まとめ
この記事では、MySQL でデータベースとテーブルを作成・削除する基本的な方法について説明しました。これらは、データベースシステムをセットアップし、データの構造を定義するために必要な最も基本的なコマンドの一部です。
前述のとおり、この MySQL チュートリアルで説明した SQL ステートメント、特に CREATE TABLE
ステートメントには、システムの動作を変更するために使用できる多くの追加パラメータがあります。これらの詳細については、MySQL の公式ドキュメントを確認してください。
よくある質問
MySQL Workbench では、まず新しいモデルを作成することから始めます。
モデルを作成したら、MySQL で新しいデータベースと同等の新しいスキーマを追加できるようになります。
MySQL でテーブルを変更するための基本的な構文は ALTER TABLE
を使用し、次のようになります。
ALTER TABLE <table_name> <change_command> <change_parameters>;
<change_command>
は、テーブルに異なるオプションを設定したり、カラムを追加または削除したり、型や制約を変更したりするなど、実行したい変更の正確な種類を示します。
コマンドの <change_parameters>
部分には、MySQL が変更を完了するために必要な追加情報が含まれます。
テーブルを追加するには、ADD
変更コマンドを使用できます。その構文は次のとおりです。
ALTER TABLE some_table ADD missing_column text;
MySQL には、すべてのテーブルを一度に削除する単一のコマンドはありません。すべてのテーブルを処理するスクリプトが必要です。
テーブルを削除するための基本的な構文は、DROP TABLE
SQL ステートメントを使用し、オプションで IF EXISTS
を含めることができます。
基本的な構文は次のとおりです。
DROP TABLE IF EXISTS <table_name>;
MySQL でインデックスを削除するには、DROP INDEX
コマンドを使用できます。基本的な構文には、<index_name>
と <table_name>
が含まれます。
その構文は次のとおりです。
DROP INDEX <index_name> ON <table_name>;
MySQL でテーブルを作成する際に、TEMPORARY
キーワードを使用できます。これにより、現在のセッション内でのみ表示され、セッションが閉じられると自動的に削除される一時テーブルが作成されます。
基本的な構文は、TEMPORARY
の追加を除けば、テーブル作成時と同じです。その構文は次のとおりです。
CREATE TEMPORARY TABLE table_name(column_1_definition,column_2_definition,...,table_constraints);