すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

phpMyAdminでリレーショナルデータベースを操作してみよう

この記事で出来るようになること

はじめに

概要

リレーショナルデータベースに関する用語を深く理解するため、「phpMyAdmin」というデータベース接続クライアントの活用が効果的です。このツールを使ってリレーショナルデータベースを操作し、実際に手を動かしながら学習を進めましょう。

リレーショナルデータベースの操作には、MySQLやMariaDBなどのRDBMSが「データベースを利用する側」のSQL文の指示に基づいて行うことが分かりました。

しかし、phpMyAdminのような「データベース接続クライアント」を使用すると、SQLで命令文を記述することなく、Webブラウザ上で簡単にRDBMSに指示し、リレーショナルデータベースを操作できます。

phpMyAdminでは、Webブラウザ上の画面操作でデータベースやテーブルを作成できますが、実際には裏でSQL文が自動生成され、そのSQL文によってRDBMSがリレーショナルデータベースを操作しています。

SQLの学習はあとで行います。まずはphpMyAdminを使用して、これまでに学んだデータベース関連の用語についての理解を深めることから始めます。

ぴかわかさん

目標

この章の目標
  • phpMyAdminの基本操作を習得する
  • リレーショナルデータベースの概念を実践的に理解する
  • CRUD操作をマスターする:Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)というデータベース操作の基本をphpMyAdminを用いて実践する
  • 外部キー制約を適用してデータ整合性を保つ方法を学ぶ
この章で完成するもの

今回はphpMyAdminを使用して、リレーショナルデータベース内に新たなテーブルを作成します。このデータベースは、以前にrailsコマンドを使用して作成したemployee_management_developmentです。

作成済みのデータベース

作成するテーブルには、社員のデータを管理するemployeesと部署のデータを管理するdepartmentsが含まれます。

これらのテーブルのカラム名や格納するデータの詳細は、以下の画像に示されています。

データベースに作成するテーブルと格納するデータの詳細

必要な前提条件・事前準備

この章を始める前に、リレーショナルデータベース(RDB)の基本用語についての知識が必要です。リレーショナルデータベースに関連する用語には、データベース、テーブル、カラム、行、主キー、外部キーなどが含まれます。また、phpMyAdminを使ったデータベース操作を行うためには、phpMyAdminへのログインが必要です。

必要なもの・知識

ログインに成功すると、以下のような画面が表示されることになります。

ログインに成功

これらの準備を整えた後、次のセクションに進んでください。

データベースの定義

データベースとは、システムやユーザーが扱うデータを1つの場所に集めたものでしたね。そして、リレーショナルデータベースとは、各データを表のような形で整理して、互いに関連付けて扱えるデータベースだと学習しました。

まずは、phpMyAdminを使ってリレーショナルデータベースを作成してみます。

データベースを作成する

railsコマンドによってリレーショナルデータベースは既に用意されていますが、データ定義をphpMyAdminで学ぶために、別のリレーショナルデータベースを作成します。

データベース一覧を表示しよう

開発環境とテスト環境のデータベースは、railsコマンドで既に作成していました。

2つのデータベースを作成

phpMyAdminでデータベース一覧を表示し、作成済みのデータベースを確認しましょう

以下のように画面上部に表示されている「データベース」をクリックしてください。

データベースを確認する

クリックすると、データベース一覧画面に遷移します。

以下のようにコマンドで作成した「employee_management_development」と「employee_management_test」のデータベースが表示されますね。

データベース一覧

画面上部に表示されている「データベース」をクリックする以外にも、以下のようにサイドバーの「employee」>「management」の中から確認することができます。

データベース確認

データベースを作成しよう

データベースの新規作成は、データベース一覧画面から行えます。

pikawakaという名前のデータベースを作成してみましょう

まずは、画面上部に表示されている「データベース」をクリックして、データベース一覧画面にアクセスしましょう。

データベース一覧画面

データベースの新規作成は、「データベースを作成する」の下にある入力欄に「データベースの名前」と「照合順序」を入力して、「作成」をクリックします。

照合順序とは、値を比較する際のルールのことです。

データベースの新規作成画面

データベース名にpikawakaと入力し、照合順序にutf8mb4_general_ciを選んでデーベースを作成してみましょう。

データベースの新規作成

データベース一覧画面を表示してみると、以下のように作成したpikawakaという名前のデータベースも含まれていることが確認できます。

データベースを確認する

データベースを削除しよう

データベースの削除は、データベース一覧画面から行います。

データベース一覧画面

先ほど作成したpikawakaという名前のデータベースを削除してみましょう

以下のようにデータベース一覧画面に表示されるpikawakaにチェックして、下に表示されている「削除」をクリックしましょう。

データベースの削除

「削除」をクリックすると、以下のように確認ダイアログが表示されます。そのまま「OK」をクリックしましょう。

確認ダイアログ

データベース一覧画面を表示すると、pikawakaという名前のデータベースが削除されていることが確認することができます。

データベース削除

データベースを削除すると、元に戻すことができません。データベースを削除される際には、注意しましょう。

テーブル定義

テーブルとは、データを表のような形で格納する領域のことでしたね。リレーショナルデータベースでデータを扱うには、テーブルを作成する必要があります。

テーブルは、共通点を持った行の集合です。次のように「社員」という共通点を持つ行が集まることでemployeesテーブルができます。

employeesテーブル

またテーブルの行と列には、レコードカラムという別名がありましたね。

レコードは「テーブルに格納されたデータ1件分」のことで、カラムは「テーブルに格納されたデータを構成する各項目」のことです。

テーブルの構成要素

employee_management_developmentのリレーショナルデータベースには、社員と部署の関係性のテーブルを作成していきます。

テーブルの詳細情報を確認しよう

これから作成するテーブルは、社員のデータを管理するemployeesと部署のデータを管理するdepartmentsです。

テーブルの詳細情報1

カラムには、「データ型」と「制約」を指定することができましたね。

データ型はテーブルに格納するデータの種類を限定するもので、制約はデータベースに格納するデータが満たさなければならない条件のことです。

データ型

非NULL制約を設定するカラムにNULLを挿入した場合

NULL自身はデータの値ではなく、値が何も入っていない状態を指します。カラムに対して、「非NULL制約」を設定すると、NULLを禁止することができます。

employeesdepartmentsの各テーブルで設定するデータ型と制約を確認します。

employeesテーブル

employeesテーブルで設定するデータ型と制約は、以下の通りです。

カラム名 データ型 制約 その他
id INT型 主キー制約(PRIMARY KEY) AUTO_INCREMENT
name VARCHAR型 非NULL制約(NOT NULL制約)
birthday DATE型 デフォルト値:
NULL
department_id INT型 外部キー制約(FOREIGN KEY)
非NULL制約(NOT NULL制約)

主キーであるidのカラムには、自動的に一意の値を付与してくれるAUTO_INCREMENTという機能を使用します。departmentsテーブルでも同様です。

ほとんどのカラムには、非NULL制約を設定しますが、birthdayのカラムだけは、デフォルト値をNULLにできるよう制約を設定しません。

departmentsテーブル

departmentsテーブルで設定するデータ型と制約は、以下の通りです。

カラム名 データ型 制約 その他
id INT型 主キー制約(PRIMARY KEY) AUTO_INCREMENT
name VARCHAR型 非NULL制約(NOT NULL制約)

それでは、実際に手を動かしてテーブルを作成していきましょう

データベースを選択しよう

テーブルを作成するデータベースを選びます。

employee_management_developmentという名前のデータベースを選択しましょう

画面上部に表示されている「データベース」をクリックして、データベース一覧画面からemployee_management_developmentをクリックしましょう。

テーブルを作成

以下のようにテーブルの管理画面が表示されます。データベースにはテーブルが作成されていないので、何もない状態です。

テーブルの管理画面

departmentsテーブルを作成しよう

作成するテーブル名はdepartmentsで、必要なカラムはidnameです。

作成するテーブル

テーブルの管理画面で作成するテーブル名とカラム数を設定しましょう

以下のように作成するテーブルの名前をdepartments、カラム数を4から2へ変更して「実行」をクリックしましょう。

テーブル名の設定

クリックすると、以下のように設定画面が表示されます。
こちらのフォームを入力することで、テーブルのカラムに関する設定ができます。

設定画面

設定画面の項目を確認しましょう

設定画面の「名前」にはカラム名、「タイプ」でデータ型を選ぶことができます。

設定項目の確認

「AI」とは、自動的に一意の値を付与してくれるAUTO_INCREMENTのことです。

主キーとなるカラムの「AI」にチェックを入れると、以下のように自動的にインデックスのフォームにPRIMARYが設定されます。

主キー

上のように「AI」にチェックを入れることで、主キー制約を設定することができます。

他にもNULLを禁止できる「非NULL制約」を設定する場合は、以下のように「NULL」のチェックを外した状態にしておきます。

NOT NULL

設定画面の項目を入力して、departmentsテーブルのカラムの詳細設定をしましょう

カラムの「名前」「タイプ」「長さ/値」などを設定していきます。departmentsテーブルの2つのカラムについて、以下のように入力しましょう。

departmentsテーブルのカラムに関する設定1

departmentsテーブルのカラムに関する設定2

名前 タイプ 長さ/値 照合順序 インデックス AI
id INT PRIMARY チェックする
name VARCHAR 30 utf8mb4_general_ci

nameカラムのデータ型はVARCHARなので、最大の文字数を指定する必要があります。「長さ/値」に30と指定することで、nameカラムの最大文字数を30に設定できます。

全て入力したら、以下のように「保存する」をクリックします。

保存する

departmentsテーブルが作成されると、以下のように画面にはテーブル構造が表示されます。各項目に設定した内容が反映されています。

idのカラムには「主キー制約」が設定されており、鍵のアイコンが表示されていますね。

テーブル構造

テーブル管理画面を開いて、departmentsテーブルが存在するか確認してみましょう

テーブル管理画面を開く

テーブル管理画面を開くと、以下のように先ほど作成したdepartmentsテーブルが1件表示されています。

テーブル管理画面

この流れでemployeesテーブルも作成していきます。

employeesテーブルを作成しよう

作成するテーブル名はemployeesで、必要なカラムはidnamebirthdaydepartment_idです。

employeesテーブル

テーブルの管理画面で作成するテーブル名とカラム数を設定しましょう

以下のように作成するテーブルの名前をemployees、カラム数を4のままで「実行」をクリックしましょう。

employeesテーブル作成

クリックすると、以下のように設定画面が表示されます。

設定画面

employeesテーブルのカラムに関する詳細設定を行いましょう

カラムの「名前」「タイプ」「長さ/値」などを設定していきます。employeesテーブルの4つのカラムについて、以下のように入力しましょう。

employeesテーブル設定1

employeesテーブル設定2

employeesテーブル設定3

名前 タイプ 長さ/値 デフォルト値 照合順序 インデックス AI
id INT PRIMARY チェックする
name VARCHAR 30 utf8mb4_general_ci
birthday DATE NULL
department_id INT

birthdayのカラムには、デフォルト値(何も指定しない場合そのまま使われる値)としてNULLを設定します。

全て入力したら、以下のように「保存する」をクリックします。

employeesテーブルを作成する

employeesテーブルが作成されると、以下のように画面にはテーブル構造が表示されます。各項目に設定した内容が反映されています。

idのカラムには「主キー制約」が設定されており、鍵のアイコンが表示されていますね。またbirthdayのカラムには、デフォルト値としてNULLが設定されます。

employeesのテーブル構造

テーブル管理画面を開いて、employeesテーブルが存在するか確認してみましょう

テーブル管理画面を開く

テーブル管理画面を開くと、以下のように先ほど作成したemployeesテーブルが表示されています。

テーブル管理画面

外部キー制約を設定しよう

employee_management_developmentのリレーショナルデータベースには、2つのテーブルを作成することができましたね。

2つのテーブルを作成

しかし、現時点ではテーブル同士の関連付けが行われていないので、employeesテーブルの情報からdepartmentsテーブルの情報を取得することができません。

テーブル同士を関連付けるために「外部キー」が必要で、データの一貫性や正当性を保つためには「外部キー制約」が必要です。

外部キーに関する用語の整理

テーブルのカラムに外部キー制約を設定する前に、少し用語を振り返りましょう。

テーブル同士の関連付けを行うために、他のテーブルの主キーを参照するカラムのことを外部キー(FK:FOREIGN KEY)と呼びましたね。

外部キー

関連付けられたテーブルは親子関係が成り立っています。参照される側のテーブルを「親テーブル」と呼び、参照する側のテーブルを「子テーブル」と呼びます。

親子関係

ぴっかちゃん

たしか親子関係が成り立つテーブルのデータの一貫性や正当性を保つためには「外部キー制約」を設定する必要があったよね!

親である「部署テーブル」に存在しないデータを子である「社員テーブル」に登録されてしまうと、親テーブルと子テーブルの整合性が崩れてしまいます。

外部キー制約がない状態

外部キーとして扱いたいカラムに対して、外部キー制約(FOREIGN KEY制約)を設定することで、親テーブルに存在しないデータが子テーブルに間違って登録されないように防止することができます。

外部キー制約

親テーブルのデータを削除する場合は、子テーブルにはどのような影響があるでしょうか。

次のように親である部署テーブルのレコードを削除すると、子の社員テーブルのデータの参照先がなくなることになります。親テーブルと子テーブルの整合性が崩れてしまいますね。

親テーブルのデータを削除する

整合性を保つために外部キー制約の設定では、2通りの対処方法がありましたね。

親テーブルのデータを削除する際に同じキーを持つ子テーブルのデータもあわせて削除するか、そもそも親テーブルのデータを削除できないようにするかを選択することができます。

今回は、親テーブルのデータを削除できないように設定していきます!

ぴかわかさん

制約を設定するカラムの確認

外部キー制約は、子テーブルであるemployeesテーブルのdepartment_idのカラムに設定します。

department_idは、departmentsテーブルの主キーであるidを参照します。

外部キー制約の設定

さらに親テーブルと子テーブルの整合性を保つために、外部キー制約を設定する際に親テーブルのデータを削除できないようにRESTRICTというオプションを付けます。

外部キー制約の設定

それでは、phpMyAdminでカラムに外部キー制約を設定してみます。

テーブル管理画面を開いて、employeesテーブルの詳細画面を表示させましょう

テーブル管理画面を開く

外部キー制約の設定画面を表示させましょう

続いて、employeesテーブルの画面上部にある「構造」を開き、以下のように「リレーションビュー」をクリックしましょう。

※departmentsテーブルではなく、employeesテーブルの詳細画面で操作してください。

リレーションビュー

クリックすると、外部キー制約の設定画面が表示されます。

外部キー制約を設定できる画面

  • 制約プロパティ - 制約名や親テーブルに対する削除・更新時の操作を選ぶ
  • カラム - 外部キー制約を設定するカラムを選ぶ
  • 外部キー制約(INNODB) - 参照先のデータベース・テーブル・カラムを選ぶ
外部キー制約を設定しましょう

外部キー制約の設定について、以下のように入力しましょう。

入力内容1

入力内容2

全て入力したら、以下のように「保存する」をクリックします。

入力内容3

外部キー制約が設定されると、以下のように画面には設定した内容が表示されます。

実際には裏でSQL文を自動生成しており、そのSQL文によってRDBMSがリレーショナルデータベースを操作しています。

今回の設定で自動生成されたSQL文は、以下の通りです。

自動生成されたSQL文
1
2
3
4
5
ALTER TABLE `employees`
  ADD FOREIGN KEY (`department_id`) 
  REFERENCES `departments`(`id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT;

SQLについては後で学習しますが、上記は「employeesテーブルを変更する。変更内容としては、外部キー制約をdepartment_idに設定し、departmentsテーブルのidを参照する。親テーブルに対する削除と更新は拒否する。」という内容です。

employeesテーブルの構造を開き、外部キー制約が設定されているか確認しましょう

employeesテーブルの構造で確認すると、department_idのカラムには「外部キー制約」が設定されており、鍵のアイコンが表示されていますね。

鍵のアイコン

これでemployee_management_developmentのデータベースに必要なテーブルを用意することができました。

必要なテーブル

次はデータ操作について学びます!

ぴかわかさん

データ操作

データ操作では、CRUDに対応する操作をおさえることが重要です。

CRUDとは、Create(作成)・Read(読み込み)・Update(更新)・Delete(削除)の頭文字を繋げた用語で、データ操作の基本となる4つの処理のことです。

RDBMSの標準のデータベース言語であるSQLには、CRUDに対応する操作としてINSERT・UPDATE・DELETE・SELECTという4つの構文が用意されています。

データベース言語

CRUD SQL構文 SQL構文の説明
Create(作成) INSERT文 テーブルにレコードを挿入する
Read(読み込み) SELECT文 テーブルのレコードを抽出する
Update(更新) UPDATE文 テーブルのレコードを更新する
Delete(削除) DELETE文 テーブルのレコードを削除する

今回はphpMyAdminを利用して、CRUDのデータ操作を行います。

phpMyAdminを利用することで、SQLで命令文を記述しなくても、Webブラウザ上で容易にRDBMSに指示し、CRUDに対応するデータ操作を行えます。

phpMyAdmin

ぴっかちゃん

たしかphpMyAdminってSQL文を記述しなくても操作できるけど、裏では自動生成されたSQL文が実行されているんだよね。

そうだよ!データ操作ではSQL文も表示されるから、次回SQLを学ぶ際にどんな指示が出せるのかイメージを掴みやすくなるよ。

ぴかわかさん

データを挿入しよう

departmentsテーブルに挿入

departmentsテーブルは、部署のデータを管理するテーブルです。
以下のように開発営業を挿入してみます。

id name
1 開発
2 営業
departmentsテーブルのデータの入力画面を表示させましょう

まずは、データベースであるemployee_management_developmentのテーブル管理画面からdepartmentsテーブルの行にある「挿入」をクリックしましょう。

データを挿入

クリックすると、以下のように挿入するデータの入力画面が表示されます。

挿入するデータを入力する画面

「無視」のチェックボックスに入るチェックを外しましょう

デフォルトでは、レコード2件分を挿入できるようにフォームが表示されていますが、「無視」にチェックが付いていあると、チェックボックスの下にあるフォームは利用されず、上にある1件分のデータのみ挿入されます。

departmentsテーブルには2件のレコードを挿入するので、チェックは外しておきましょう。

チェックボックス

departmentsテーブルに挿入するデータを入力して、実行をクリックしましょう

nameカラムの値に開発営業を入力して、実行をクリックしましょう。

※idにはAUTO_INCREMENT(自動的に一意の値を付与)の機能を設定しているので、何も入力しません。

departmentsテーブルに挿入するデータ

実行をクリックすると、以下のSQL文により2件分のレコードが挿入されます。

SQL文

departmentsテーブルを表示して、挿入したデータを確認しましょう

departmentsテーブルで「表示」をクリックすると、以下のように挿入したデータを確認することができます。idには値を入力しませんでしたが、自動的に12が設定されています。

データを確認

同じ手順でemployeesテーブルにもデータを挿入してみましょう。

employeesテーブルに挿入

employeesテーブルは、社員のデータを管理するテーブルです。
以下のように6件分のデータを挿入してみます。

id name birthday department_id
1 田中太郎 1980-10-22 1
2 山田花子 1983-08-20 1
3 高橋一朗 1986-06-16 2
4 伊藤晴子 1987-10-01 1
5 鈴木二郎 1990-01-17 2
6 山口冬子 1993-05-12 2
employeesテーブルのデータの入力画面を表示させましょう

まずは、データベースであるemployee_management_developmentのテーブル管理画面からemployeesテーブルの行にある「挿入」をクリックしましょう。

employeesテーブルの挿入

クリックすると、以下のように挿入するデータの入力画面が表示されます。

employeesテーブルの挿入画面1

ページ下部にある2を6に変更して、6件分のデータを挿入できるようにしましょう

デフォルトでは、レコード2件分を挿入できるように設定されていますが、6件分のデータを挿入するために、ページ下部にある26に変更しておきましょう。

employeesテーブルの挿入画面2

employeesテーブルに挿入するデータを入力して、実行をクリックしましょう
id name birthday department_id
1 田中太郎 1980-10-22 1
2 山田花子 1983-08-20 1
3 高橋一朗 1986-06-16 2
4 伊藤晴子 1987-10-01 1
5 鈴木二郎 1990-01-17 2
6 山口冬子 1993-05-12 2

以下のようにid以外の値を入力して「実行」をクリックしましょう。フォームにデータを入力すると、自動的に「無視」のチェックが外れます。

※外部キー制約のより、department_idには参照先のdepartmentテーブルのidの値のみ選択可能です。

employeesテーブルの挿入画面3

実行をクリックすると、以下のSQL文により6件分のレコードが挿入されます。

SQL文

employeesテーブルを表示して、挿入したデータを確認しましょう

employeesテーブルで「表示」をクリックすると、以下のように挿入したデータを確認することができます。

挿入したデータを確認1

外部キー制約の設定により、department_idの値はdepartmentテーブルの主キーを参照します。

挿入したデータを確認2

以下のようにdepartment_idの値をクリックすると、参照先のレコードにアクセスすることができます。

リレーションシップ

次はデータの更新について学ぶよ!

ぴかわかさん

データを更新しよう

employeesテーブルを更新

employeesテーブルのデータを更新してみましょう。
山口冬子さんの生年月日を1993-05-12から1993-12-12に更新してみます。

employeesテーブルを更新

birthdayの値を1993-05-12から1993-12-12に更新しましょう

まずは、employeesテーブルの「表示」の画面から以下のように6行目にある「編集」をクリックしましょう。

編集をクリックする

編集をクリックすると、id6のレコードの編集画面が表示されます。

以下のようにbirthdayの値を1993-05-12から1993-12-12に変更して「実行」をクリックしてみましょう。

データ変更

実行をクリックすると、以下のSQL文によりbirthdayの値が更新されます。

birthdayの値を更新1

birthdayの値を更新2

departmentsテーブルを更新

前回の正規化で学習しましたが、RDBでは一般にデータ同士の関連を保ったままテーブルを分けて管理することで、データを変更するときに最小限の修正で済みます。

少しおさらいしてみます。「営業部」を今後増やす予定で、従来の営業部は「法人営業部」に変更するとします。次のように1つのテーブルに情報をまとめてしまうと、「営業部」の全ての箇所を「法人営業部」に修正する必要があります。

正規化されていないテーブルの修正

このときに1件でも修正漏れがあると、データ内容に矛盾が生じてしまいます。

しかし、1つのテーブルにまとまっていた情報を分けて、テーブル同士を関連付けることで、修正は1箇所で済みます。

正規化されるテーブルの修正

今回はすでにemployeesdepartmentのテーブル同士が関連付けられている状態なので、部署を営業から法人営業に修正する際には、1箇所だけで済みます。

departmentsテーブルのデータを更新してみましょう

まずは、departmentsテーブルの「表示」の画面から以下のように2行目にある「編集」をクリックしましょう。

表示画面

編集をクリックすると、id2のレコードの編集画面が表示されます。
以下のようにnameの値を営業から法人営業に変更して、「実行」をクリックしてみましょう。

データを変更する

実行をクリックすると、以下のSQL文によりnameの値が更新されます。

nameの値を更新する

employeesテーブルでdepartment_idが2の値をクリックしましょう

employeesテーブルで2department_idの値をクリックすると、以下のように更新された法人営業が表示されます。

法人営業

RESTRICT:親テーブルの主キーの値は更新できない

employeesテーブルのdepartment_idに外部キー制約を設定した際に、親テーブルに対する更新時の操作でRESTRICTを選択していましたね。

これは「親テーブルに対する更新操作を拒否する」というオプションです。

RESTRICT

親テーブルであるdepartmentテーブルのnameカラムの値は更新することができますが、主キーであるidカラムの値は更新することができません。

更新しようとすると、以下のようにエラーが起こります。

エラー

RESTRICTの設定により、department_idカラムが参照するdepartmentテーブルの主キーであるidカラムの値は、更新することができないので注意しましょう。

データを削除しよう

以下のようにemployeesテーブルのid6のレコードを削除してみます。

idが6のレコードを削除

idが6のレコードを削除してみましょう

まずは、employeesテーブルの「表示」の画面から以下のように6行目にある「削除」をクリックしましょう。

削除1

以下のようにダイアログが表示されるので、「ok」とクリックします。

削除2

okをクリックすると、ダイアログで表示されたSQL文によりid6のレコードが削除されます。以下のようにemployeesテーブルの中に存在しません。

削除3

RESTRICT:親テーブルのレコードは削除できない

親テーブルに対する更新操作を拒否したように、外部キー制約の設定により、親テーブルのレコードを削除することもできないので注意してください。

以下のように削除時の操作もRESTRICTを選択していましたね。

削除時RESTRICTを選択

これは「親テーブルに対する削除操作を拒否する」というオプションです。

親テーブルであるdepartmentテーブルのレコードは削除することができません。削除しようとすると、以下のようにエラーが起こります。

削除操作に対するエラー

データを抽出しよう

各テーブルの画面上部に表示されている「検索」をクリックして、検索条件を設定する画面からテーブルのデータを抽出することができます。

テーブルから特定のカラムの値を抽出

テーブルから特定のカラムの値だけを抽出することができます。検索の条件を設定して、employeesテーブルのデータを抽出してみましょう。

employeesテーブルのnameカラムの値だけ抽出してみましょう

まずは、employeesテーブルの画面上部に表示されている「検索」をクリックして、検索条件を設定する画面を開きましょう。

検索条件を設定する画面1

以下の画面でデータを抽出する条件を設定することができます。

検索条件を設定する画面2

それではオプションを開いて、以下のように表示するカラムでnameを選択して、実行をクリックしましょう。

条件を設定

実行をクリックすると、以下のSQL文によりnameカラムだけの値が表示されます。

sql文

このようにオプションを利用することで、テーブルから特定のカラムの値だけを抽出することができます。

特定のレコードを抽出

検索条件を設定する画面の「演算子」を使うことで、特定のレコードを抽出することができます。

演算子

department_id = 1の条件に当てはまるレコードだけ抽出してみましょう

まずは、department_idカラムの値が1であるレコードだけをemployeesテーブルから抽出してみます。以下のように入力して「実行」をクリックしてください。

以下では、department_id = 1という条件を設定します。

条件を設定

実行すると、以下のようにdepartment_id = 1の条件に当てはまるレコードだけが表示されます。

実行結果

生年月日が1986-01-01以降の社員だけを抽出してみましょう

以下のように検索条件の画面でbirthdayの行の演算子を>にして、値を1986-01-01と入力して「実行」をクリックしましょう。

検索条件

実行すると、以下のようにbirthday > 1986-01-01の条件に当てはまるレコードだけが表示されます。

実行結果

データの整列

検索条件の画面にある「表示順」でデータの整列をすることができます。

表示順

idの値を降順に並び替えて表示してみましょう

以下のようにオプションの「表示順」を入力して、「実行」をクリックしてください。

表示順を変える

実行をクリックすると、以下のようにidの値が降順に並び替えられます。

降順に並び替えられる

この章のまとめ

今回の章では、phpMyAdminを用いてリレーショナルデータベースの操作を行いました。SQL文を直接扱わずに、Webブラウザ上で直感的な操作によりデータベースやテーブルの作成が可能であることを学びました。裏側ではSQL文が自動生成され、それによりRDBMSがリレーショナルデータベースを操作しています。

次の章では、SQL文について学習します。この章を終える前に、以下の手順に従って今まで作成したテーブルを削除することを忘れないでください。こうすることで、SQLの章に進む前に環境を整えることができます。

SQLの章に進む前に、以下の手順に従ってテーブルを削除しておきましょう

employee_management_developmentにあるテーブルを全て削除します。

以下のようにテーブルの管理画面からemployeesテーブルの行にある「削除」をクリックしましょう。子テーブルから削除します。

テーブル削除1

クリックすると、以下のように確認ダイアログが表示されます。そのまま「OK」をクリックしましょう。

テーブル削除2

この流れで親テーブルであるdepartmentテーブルを削除しましょう。

親テーブルから削除した場合、以下のように外部キー制約違反でエラーが起こり、テーブルを削除できないので、注意しましょう。

外部キー制約違反

employee_management_developmentデータベースのテーブルを全て削除すると、以下のようにテーブル数が0と表示されます。

テーブル削除3

この章のまとめ

  • phpMyAdminとは、リレーショナルデータベースのデータをWebブラウザ上で容易に扱うことができるソフトウェアのこと
  • CRUDとは、Create(作成)・Read(読み込み)・Update(更新)・Delete(削除)というデータ操作の基本となる4つの処理のこと