Lesson 5
データベースにテーブルを作成する
Lesson 5
Chapter 1
データベースにテーブルを作成し、単純なSELECT文で検索する
本レッスンでは、これからのレッスンで使用するデータベースの準備を下記の通り実施していきます。
- データベースを作成する。
- 作成したデータベースにテーブルを作成する
- 作成したテーブルにデータを作成する。
- 作成したデータをSELECT文で検索して確認する。
- 本レッスン以降で、使用するデータをインポートする。
ここでは TablePlus を使用しますが、基本は SQL で操作していきます。
Powershell でも同じ SQL 文を実行できるので、どちらを使っても問題ありません。
データベースを作成する
データベースを作成していきます。
まずは、TablePlus から MySQL に接続して SQL を実行できるようにしましょう。
TablePlus を MySQL に接続する
① TablePlus を起動して、接続設定済みの「MySQL」をダブルクリックします。
(※接続方法は、Lesson 3 Chapter 2「DBに接続する」を参照してください)
② 次の画面が開いたら SQL アイコン(赤枠部分)をクリックします。
すると、SQL の入力欄が現れます(青枠部分)。ここに SQL を記載していきます。
CREATE DATABASE 文でデータベースを作成する
データベースを作成するには「CREATE DATABASE」文を使用します。
基本的な構文は次のとおりとなります。
CREATE DATABASE [データベース名];
ここでは、データベース名を「test」として作成を進めます。
TablePlus の SQL 入力欄に CREATE DATABASE test;
と記載して、その行にカーソルを残したまま「Run Current」ボタンをクリックしてください。
実行結果として「Query 1 Ok: 1 row affected」と表示されたら、データベースは作成されています(下図)。
(参考)CREATE DATABASE 文の公式リファレンス
CREATE DATABASE 文では、細かい設定を行うこともできます。
必要に応じて公式マニュアルを参照すれば大丈夫ですが、概略を紹介しておきます。
(公式MySQL 8.0 リファレンスマニュアルから抜粋)
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'}
}
{DATABASE | SCHEMA}
は、作成する対象を選びます。[IF NOT EXISTS]
を指定すると同名の DB が不存在の場合のみ DB を作成します。
この指定が無い場合は、同名の DB が存在する場合にエラーが発生します。db_name
には、データベースの名前を設定します。[create_option]
は、データベースのオプション設定を指定します。
指定しない場合は、デフォルト設定が反映されます。
オプションの設定内容は下記の通りです。
①[DEFAULT]
は、デフォルト設定が設定されます。指定しない場合と同じです。
②CHARACTER SET
は、データベースの文字コードを設定します。
③COLLATE
は、データベースの照合順序を指定します。
④ENCRYPTION
は、データベースの暗号化を定義します。
テーブルを作成する
データベースの指定
テーブル作成の前に操作するデータベースの指定をする必要があります。
TablePlus では、DB アイコン(青枠部分)からクリックのみでデータベース指定ができますが(Leeson 3 Chapter 3 参照)、ここでは SQL 文から切替えを行うようにします。
SQL の入力スペースに USE test;
とコマンドを入力し、カーソルをコマンドに合わせた状態で「Run Current」をクリックします。
実行結果に「Query 1 Ok」と表示されれば成功です。
テーブル作成の基本構文
データベースを指定できたら、テーブルを作成します。
テーブルを作成するには、CREATE TABLE 文を使用します。基本構文は次のとおりです。
CREATE TABLE [テーブル名] (カラム名1 データ型, カラム名2 データ型, ...)
CREATE TABLE 文を作成する
上記の基本構文に従って、次のような定義のテーブルを作成します(データ型と制約については、後で解説します)。
No | カラム名 | データ型 | 制約 |
---|---|---|---|
1 | id | INT(整数型) | PRYMARY KEY |
1 | name | VARCHAR(文字列型) | NOT NULL |
これを、CREATE TABLE 文で表すと次のようになります。
CREATE TABLE sample (id INT PRIMARY KEY, name VARCHAR(30) NOT NULL);
それでは、次のように、TablePlus に SQL 文を入力し、カーソルを SQL 文に合わせた状態で「Run Current」をクリックしてください。
実行結果に「Query 1 Ok」と表示されれば成功で、テーブルが作成が完了しています。
(参考)CREATE TABLE 文の公式リファレンス
CREATE TABLE 文には様々なオプションがあります。
公式MySQL 8.0 リファレンスマニュアル
で紹介されている構文は次のとおりです(一部抜粋)。
CREATE TABLE文(抜粋)
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
[TEMPORARY]
は、一時テーブルを作成するときに指定します。[IF NOT EXISTS]
を指定すると同名の DB が不存在の場合のみ DB を作成します。 この指定が無い場合は、同名の DB が存在する場合にエラーが発生します。tbl_name
には、作成するテーブルの名前を指定します。(create_definition,...)
は、カラム名やカラム定義を指定します。[table_options]
は、テーブルのオプション設定するときに指定します。[partition_options]は、
パーティションのオプション設定するときに指定します。
オプション設定の詳細は、公式MySQL 8.0 リファレンスマニュアルを参照しましょう。
MySQL で使用できるデータ型の主なもの
ここでは、よく使用されるデータ型を中心に一覧としておきます(これ以外にも様々なデータ型があります)。
詳しくは、公式リファレンス - データ型 で紹介されていますので、詳しくはそちらを参照してください。
No | データ型 | 種類 | サイズ | 扱える範囲 |
---|---|---|---|---|
1 | TINYINT | 整数型 | 1 byte |
-128 ~ 127 符号なしの場合は 0 ~ 255 |
2 | SMALLINT | 整数型 | 2 byte |
-32768 ~ 32767 符号なしの場合は 0 ~ 65535 |
3 | INT | 整数型 | 4 byte |
-2147483648 ~ 2147483647 符号なしの場合は 0 ~ 4294967295 |
4 | BIGINT | 長整数型 | 8 byte |
-9223372036854775808 ~ 9223372036854775807 符号なしの場合は 0 ~ 18446744073709551615 |
5 | DECIMAL(M, D) | 固定小数点型 | - |
M: 桁数(最大桁数 65) D: 小数部の最大桁数(最大 30) |
6 | FLOAT | 単精度浮動小数点数型 | 4 byte | 有効桁数 7 桁の実数 |
7 | DOUBLE | 倍精度浮動小数点数型 | 8 byte | 有効桁数 15 桁の実数 |
8 | DATE | 日付型 | - |
'1000-01-01' ~ '9999-12-31' 形式: 'YYYY-MM-DD'
|
9 | DATETIME | 日付時刻型 | - |
'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' 形式: 'YYYY-MM-DD hh:mm:ss'
|
10 | TIMESTAMP | タイムスタンプ型 | - | '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC |
11 | CHAR | 固定長文字列型 | - |
0 ~ 255 文字 指定例: CHAR(80)
|
12 | VARCHAR | 可変長文字列型 | - |
0 ~ 65535 文字 指定例: VARCHAR(500)
|
13 | BIT(M) | ビット値型 | - | 0 ~ 64 Bit(M に bit 数を指定) |
なお、MySQL 型には、真偽値型(True と False)という形式はないため、TINYINT型 または BIT型にて数値として真偽値を格納することとが通例です。
その場合は、一般的に、「0 を False」、「1 を True」とみなすことになります。
テーブル定義における制約
CREATE TABLE 文におけるテーブル定義には、データ型のほかに「制約」を指定できます。
制約を使用することで、データベースに格納するデータについて、「空値(NULL)を許可しない」とか「値の重複を許可しない」などの条件を設定することができます。
以下、よく使用される制約を挙げておきます。
No | 名称 | 内容 |
---|---|---|
1 | NOT NULL 制約 | NULL 値を許容しない制約です。つまり必ず値を指定する必要があります。 |
2 | UNIQUE 制約 | 値が一意であること(重複しないこと)が必要です。NULL 値は許容されます。 |
3 | PRYMARY KEY 制約 |
日本語で「主キー」と呼ばれ、テーブルに1のみ設定できます。 値は一意(UNIQUE)で、必ず指定(NOT NULL)しなければなりません。 |
4 | FOREIGN KEY 制約 | 日本語で「外部キー」と呼ばれます。指定された他のテーブルのカラムの値を格納し、そこに存在しないデータを格納することはできません。 |
5 | DEFAULT 値の設定 |
値の指定が無い場合は、デフォルト値を格納します。 指定例: price INT DEFAULT 500
|
データを追加する
次は作成したテーブルにデータを追加しましょう。
データを追加するには、INSERT 文を使用します。
基本構文① レコードを1件追加する
INSERT 文の基本構文を確認しましょう。
次のように、データ(レコード)を挿入するテーブル名を指定して、データを追加するカラム名と値をセットで指定します。
INSERT INTO [テーブル名] (カラム名1, カラム名2, ...) VALUES (値1, 値2, ...);
上記の構文では「カラム名1」に「値1」(以下同様...)が格納されることになります。
上記の基本構文に従って、次のようなデータ(レコード)を追加します。
id | name |
---|---|
1 | yamada |
これをもとに、INSERT 文を作成すると次のようになります。
INSERT INTO sample (id, name) VALUES (1, 'yamada');
それでは、次のように、TablePlus に SQL 文を入力し、カーソルを SQL 文に合わせた状態で「Run Current」をクリックしてください。
実行結果に「Query 1 Ok: 1 row affected」と表示されれば、データ追加完了となります。
基本構文② カラム名の指定を省略する
CERATE TABLE 文で定義された順に全てのカラムの値を指定する場合は、以下のようにカラム名の指定を省略することができます。
INSERT INTO [テーブル名] VALUES (値1, 値2, ...);
それでは、TablePlus で実行してみましょう。
SQL 文として INSERT INTO sample VALUES (2, 'tanaka');
と指定して実行してみます。
次のようになれば、成功です。
基本構文③ 複数のレコードを同時に追加する
複数のレコードを同時に追加する場合は、次のように VALUE 以下にカンマ区切りでデータを追加します。
INSERT INTO [テーブル名] (カラム名1, カラム名2, ...)
VALUES (値1, 値2, ...), (値1, 値2, ...), (値1, 値2, ...);
こちらも、TablePlus で実行してみましょう。
SQL 文として INSERT INTO sample VALUES (3, 'suzuki'), (4, 'saito');
と指定して実行してみます。
次のようになれば、成功です。
追加されたデータを確認する
これまで 4 件のデータを追加しました。TablePlus でテーブルの状態を確認してみましょう。
左側の欄に sample テーブルが表示されているのでこれをクリックします。
正しく INSERT 文が実行できていれば、下図のように、青枠部分にテーブルの内容が表示されます。
基本構文④ 他のテーブルにあるレコードを SELECT して追加する
他のテーブルのデータを使用してデータ(レコード)追加をすることができます。
ここでは、構文のみの紹介にとどめます。
INSERT 文は、Lesson 10 で改めて解説しますので、現時点で正確に理解しなくとも大丈夫です。
INSERT INTO [テーブル名] (カラム名1, カラム名2, ...)
SELECT カラムA, カラムB, ... FROM [他のテーブル名] WHERE [抽出条件];
(参考)INSERT 文の公式リファレンス
INSERT文は構文や、定義内容が様々にあります。
より詳しい定義は 公式MySQL 8.0 リファレンスマニュアル を参照してみましょう。
INSERT文(抜粋)
INSERT
[INTO] tbl_name
[(col_name [, col_name] ...)]
{ {VALUES | VALUE} (value_list) [, (value_list)] ...
}
[INTO]
は、MySQL では省略可能ですが、標準 SQL では入れる必要があるので注意しましょう。[(col_name [, col_name] ...)]
は、データを登録するカラム名を指定します。ただし、全カラムに対してデータを登録する場合は、省略できます。{VALUES | VALUE}
は、どちらか一方を必ず指定します。標準 SQL に合わせて VALUES を使用した方が良いでしょう。(value_list) [, (value_list)]
には、登録するデータの内容を指定します。col_name
を複数指定している場合は、「,(カンマ)」区切りでカラム指定した同じ順番にデータを指定します。
データを検索する
それでは、これまでに登録したデータを SELECT 文で取得してみましょう。
SELECT 文の基本構文
まず、構文から見ていきます。
① 全件取得する SELECT 文
Lesson 4 では次のような SELECT 文を使用しました。
SELECT [カラム名] FROM [テーブル名];
上記の指定をすると、テーブルに存在するレコードを全て取得することになります。
レコード
レコードとは、1件分のデータのことを示します。
データを表形式で捉えた場合、横に並ぶ列がカラム、縦に並ぶ行がレコードということなります。
② 抽出条件を指定する SELECT 文
今回は「検索」を行うため、次のような構文を使用します。
SELECT [カラム名] FROM [テーブル名] WHERE [抽出条件];
ここで、新しく「WHERE 句」というものが出てきています。
簡単に言えば、
WHERE id = 1
のように抽出条件を指定することで、取得するレコードを絞り込むことができます(WHERE 句については、Lesson 6 以降で詳細に解説していきます)。
SELECT 文を作成して検索を実行する
それでは、実践です。ここでは「name」が「suzuki」であるレコードを検索して取得してみます。
SELECT 文は次のようになります。なお、カラム名のところには、アスタリスク(*)を指定して全カラムを取得するようにしています(Lesson 4 参照)。
SELECT * FROM sample WHERE name = 'suzuki';
それでは、TablePlus で実行してみましょう。
次のように SQL 文を指定して、いつものように「Run Current」をクリックします。
上のように、実行結果部分(青枠部分)に取得されたデータが表示されていれば成功です。
WHERE 句における数値と文字列の指定方法の違いについて
上記の例では、WHERE name = 'suzuki'
というように「suzuki」をシングルクォーテーションで囲んでいました。
SQL 文を書く時は、文字列はシングルクォーテーション(またはダブルクォーテーション)で囲むという決まりがあります。
簡単にまとめると次の表のとおりです。
No | データ型 | WHERE 句の例 | 説明 |
---|---|---|---|
1 | 数値型 | WHERE price = 1200 | 数値型(整数・実数)の場合は、そのまま指定します。 |
2 | 文字列型 | WHERE name = 'yamada' | 文字列型の場合は、クォーテーションで囲みます。 |
3 | 日付型 | WHERE created_at = '2022-12-01' | 日付型の場合は、クォーテーションで囲みます。 |
4 | 真偽値型 | WHERE delete_flag = false | 真偽値型の場合は、そのまま指定します。 |
(参考)SELECT 文の公式リファレンス
SELECT文にも様々な指定項目があります。
より詳しい定義は公式MySQL 8.0 リファレンスマニュアルを参照しましょう。
SELECT文(抜粋)
SELECT
select_expr [, select_expr] ...
[FROM table_references]
}
select_expr [, select_expr]
は、取得したいカラム名を指定します。複数取得したい場合は、「,(カンマ)」区切りで指定してください。 また、全カラムを取得したい場合は「*(アスタリスク)」を指定してください。[FROM table_references]
は、table_references
に検索するテーブル名を指定します。

Lesson 5
Chapter 2
実習で使用するテーブルをインポートする
本レッスン以降で、使用するデータをインポートしましょう。
インポートファイルを任意のフォルダにダウンロードしてください。
TablePlusの場合
右上の「Menu」をクリックして、「File」>「Import」>「From SQL Dump」の順に選択し、ダウンロードしたファイルを開いてください。
次の画面が表示されたら「Import」ボタンをクリックします。
ポップアップで「Import SQL successfully」が表示されたら、インポートは完了です。
PowerShellの場合
PowerShell を起動して MySQL に接続します。
PowerShell
> mysql -u root -p
Enter password: ****
データベース test を選択します。
PowerShell
mysql> use test
Database changed
インポートは、次の SQL 文で実行します。
SOURCE [ダウンロードしたファイルのパス]\test.sql;
実行結果に「ERROR…」が1件も表示されず、次のように「Query OK…」が表示されていればインポートは完了です。
PowerShell
mysql> SOURCE C:\file\test.sql
Query OK, 0 rows affected (0.07 sec)
Query OK, 0 rows affected (0.06 sec)
# 中略
Query OK, 14 rows affected (0.00 sec)
Records: 14 Duplicates: 0 Warnings: 0
