はじめに
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 ステートメントに追加して、この動作をオーバーライドできます。
IF NOT EXISTS
句を使用するには、CREATE TABLE
フレーズの後、テーブル名の前にあるコマンドに挿入します。
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: 一意の従業員 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
を使用します。
外部キーは、1 つのテーブルの列または列が別のテーブルに含まれる値と一致することを保証する方法です。これにより、テーブル間の参照整合性が保証されます。
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
コマンドで実現できます。使用可能なオプションの詳細については、ALTER TABLE
の公式 MySQL ドキュメントを確認してください。
テーブルの削除
テーブルを削除する場合は、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 ドキュメントを確認してください。
FAQ
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 で一度にすべてのテーブルを削除する単一のコマンドはありません。すべてのテーブルを処理するスクリプトが必要です。
テーブルを削除するための基本的な構文は、オプションで IF EXISTS
が含まれる DROP TABLE
SQL ステートメントを使用します。
基本的な構文は次のとおりです。
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);