こんにちは、あっきー(IwswAkht)です。
データベースの扱いに慣れようシリーズということで今回もやっていきます。前回の記事はこちら
データベースの基本的な知識、接続の仕方、設定などを前回は解説しましたので、今回はデータベースの中にテーブルを作ったり変更したりするやり方について解説していきます。
それではやっていきましょう。
データベースの構造
【MySQL】データベースへの接続・作成【基本】ではデータベースの基本的な知識と操作方法を確認しました。
ここでは、はじめにデータベースの基礎的な構造を確認していきます。
データベースは以下の構造で成り立っています。
- データベース
- テーブル
- レコードとカラム
フレームワークからプログラミングをはじめた方などで、意外とこういう基本的なところを知らなかったみたいなこともあるようなので簡単に解説させていただきます。
データベースの構造はEXCELで例えるのがわかりやすいと思いますのでそんな感じでやっていこうと思います。
データベース
データベースは一言でいうなら箱です。
データベースという1つの箱の中に複数のテーブルがあり、テーブルの中に複数のカラムがありと階層的な構造になっている大元になる部分になります。
エクセルで例えるならワークブックがデータベースにあたる部分になります。
テーブル
テーブルは一言でいうなら情報のかたまりです。
情報のかたまりと言ってもでたらめに情報が集まっているわけではありません。
例えば、お客さんの情報を集めたいのにそこに社員のデータなどが混ざっていたら何に対する情報なのかさっぱりわからないのですね。
なので、テーブルはある特定の条件に当てはまる「データ」を集めるという前提でまとめるので、お客さんの情報が集まったテーブル、社員情報が集まったテーブルと言うふうに切り分けてデータベースをつくっていくことが大切です。
Excelでいうならワークシートの部分が該当します。
1つのワークシートに全部の情報をまとめることってまずありませんよね。「お客様シート」と「社員シート」みたいに分けて管理するかと思います。
レコードとカラム
レコードとカラムはテーブルの詳細情報です。
テーブルの例で出したお客さん情報で言うならお客さんの名前や電話番号などの1つのカテゴリがカラムになり、名前はAさん、電話番号はxxxと言うカラムに対する実際のデータ群をレコードといいます。
Excelで表を作るイメージですね。
データベースの基本的な構造を理解できましたでしょうか?
次はデータベース作成、テーブル作成、カラムの操作などをして、実際に手を動かしながら確認していきましょう。
テーブルの操作
先ほどのデータベースの構造にそって実際にテーブルをつくってみましょう。
データベースの作成はこちらの記事でやっていますので参考にしながらcustomerとうデータベースを作成します。
ターミナル
1 2 3 4 5 |
# mysqlクライアントに接続 $ mysql -u root -p # データベース作成 mysql> create database customer; |
テーブルの作成
テーブルの作成方法をみていきましょう。
customerデータベースにcustomer_infoと言うテーブルを作成してみますので以下のコマンドを実行してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# データベースに移動 mysql> use customer; # テーブル作成 mysql> create table customer_info(name varchar(255), phone varchar(255), mail varchar(255), sex char(1) default '1' not null); # テーブル一覧の確認 mysql> show tables; +--------------------+ | Tables_in_customer | +--------------------+ | customer_info | +--------------------+ # または mysql> show fields from customer_info; # テーブルの確認 mysql> desc customer_info; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(255) | YES | | NULL | | | phone | varchar(255) | YES | | NULL | | | mail | varchar(255) | YES | | NULL | | | sex | char(1) | NO | | 1 | | +-------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) |
テーブルの作成が確認できましたら以下に構文の解説をしていきます。まずテーブルの作成の構文は以下のようになります。
create table テーブル名(カラム名 データ型, カラム名 データ型)
基本はカラム名+データ型の構成で追加したい分のカラムを登録をします。
データ型については次の項目で説明していきます。
必要に応じて、(カラム名 データ型 制約)と言う風にオプションを追加します。
上記のコードブロックに記載あります、default '0' not nullにあたる部分ですね。
制約についてはまた別の記事で解説していきたいと思いますので、現状は何かしらして欲しくない条件を追加することができると言う認識だけ持っておいていただけばオッケーです。
データ型
ここまでデータベースの構造をExcelに例えて説明しましたが、データベースに決定的な違いがあるとすればデータ型の存在があります。
データ型とは、各カラムにどんな値を保存するのかを表す情報です。
例えば、テーブルの作成のコードブロック内にありますname varchar(255)とありますが、これがデータ型の指定になります。
varchar型は文字列をセットできるデータ型、(255)は何文字まで入力できるかと言うことを指定しています。
その他にもint型は整数など各カラムに対してデータ型を指定してテーブルを構成しながら入ってくる情報に対して適切なデータ型を指定して行くことが基本になります。
データ型の種類などは公式ページを参考にしていただいたり、個人ブログなどでまとめている方などもいらっしゃいますので参考にしてみるといいかもしれないですね。
テーブルの削除
テーブルの削除の仕方も確認しておきましょう。
まだ同じテーブル内でカラムに関する操作をしますので最後まで試すとしたら記事が終わってからにしてください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# データベースに移動 mysql> use customer; # テーブル一覧の確認 mysql> show tables; +--------------------+ | Tables_in_customer | +--------------------+ | customer_info | +--------------------+ 1 row in set (0.00 sec) # テーブルの削除 mysql> drop table customer_info; Query OK, 0 rows affected (0.02 sec) # テーブルが削除されているかの確認 mysql> show tables; Empty set (0.00 sec) |
Emptyと表示されていることからテーブルが削除されていることが確認できますね。
さて、普通にmysqlクライアントから自分でsqlコマンドを打つ分にはこれで良いのですが、仮にプログラム上でテーブルを削除するなどをした場合だとこれだと問題があります。
試しにもう一度同じテーブルを削除するsqlコマンドを実行してみましょう。
ターミナル
1 2 3 |
# テーブルの削除 mysql> drop table customer_info; ERROR 1051 (42S02): Unknown table 'customer.customer_info' |
エラーが表示されていることが確認できますね。すでにないテーブルを削除しようとしてますのでそんなテーブルは知らないよと怒られてしまったわけです。
以上から、もしテーブルが存在したら削除するという制御を加える必要があることが想定されます。
そんな場合は以下のsqlコマンドを使うことで解決することができます。
ターミナル
1 2 3 |
# テーブルが存在したら削除 mysql> drop table if exists customer_info; Query OK, 0 rows affected, 1 warning (0.00 sec) |
OKでエラーが発生していないことを確認できます。こういう風に特定の制御を加えることもできるということを今回は覚えていってもらえたらと思います。
カラムの操作
データベースを作成した後にカラムの追加・削除・変更をしたいということはよくあります。
そんな時に1からテーブルを作り直していたら不便ですし、すでにレコードが複数登録されている場合だと作り直すのは良い選択肢とは言えませんよね。
そんな時に既存のテーブルを残したまま一部のカラムに対して何かしらの変更を加える方法について順番に確認していきましょう。
カラムの追加
説明は後でまずはカラムの追加をしてみましょう。
mysqlクライアントを起動したら以下のSQLを実行してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# データベースに移動 mysql> use customer; # カラムの追加 mysql> alter table customer_info add age varchar(3); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 # テーブルの確認 mysql> desc customer_info; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(255) | YES | | NULL | | | phone | varchar(255) | YES | | NULL | | | mail | varchar(255) | YES | | NULL | | | sex | char(1) | NO | | 1 | | | age | varchar(3) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 5 rows in set (0.01 sec) |
ageカラムが追加されたことが確認できます。
このようにカラムの追加にはalter tableという命令文を使うことで追加することが可能です。
追加の場合は以下の構文で追加することができます。
alter table テーブル名 add カラム名 データ型
また、上記のsqlコマンドではテーブルの末尾にカラムが追加されますが、例えば先頭に追加するしたい場合などは以下の構文でできます。
alter table テーブル名 add カラム名 データ型 first
実際のsqlコマンドとしては以下です。
ターミナル
1 |
mysql> alter table customer_info add age varchar(3) first; |
また、特定のカラムの後ろに追加したいという場合は以下の構文でできます。
alter table テーブル名 add カラム名 データ型 after カラム名
実際のsqlコマンドとしては以下です。
ターミナル
1 |
mysql> alter table customer_info add age varchar(3) after name; |
これでnameカラムの後ろに新たに追加します。
カラムの変更
続いてカラムを変更してみましょう。
先ほどのageカラムのデータ型をint型に変更してみますので以下のSQLを実行してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# カラムの変更 mysql> alter table customer_info change age age int; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> desc customer_info; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(255) | YES | | NULL | | | phone | varchar(255) | YES | | NULL | | | mail | varchar(255) | YES | | NULL | | | sex | char(1) | NO | | 1 | | | age | int | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) |
Typeがintになって型が変更されたことが確認できます。
追加と同じく変更でもalter table命令文を使用します。
構文は以下になります。
alter table テーブル名 change 変更前カラム名 変更後カラム名 データ型
これで変更はできますが、カラム名とデータ型を変更するsqlコマンドです。
データ型を変更するだけですので変更しないカラム名を2回書くのは少々面倒ですね。
そんな時は以下のSQLでデータ型だけを変更することもできます。
ターミナル
1 2 |
# カラムのデータ型の変更 mysql> alter table customer_info modify age varchar(3); |
また、カラム名だけを変更したいと言う場合では以下のSQLで変更することが可能です。
ターミナル
1 2 |
# カラム名の変更 mysql> alter table customer_info rename column age to new_name; |
これでカラムとデータ型同時変更、個別に変更することができるようになりますね。
カラムの削除
削除方法の確認として先ほどのageカラムを削除してみましょう。
カラムの変更でカラム名の変更を行った方はnew_nameになります。
以下のsqlコマンドを実行してカラムが削除されたか確認してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# カラムの削除 mysql> alter table customer_info drop age; mysql> desc customer_info; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(255) | YES | | NULL | | | phone | varchar(255) | YES | | NULL | | | mail | varchar(255) | YES | | NULL | | | sex | char(1) | NO | | 1 | | +-------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) |
カラムが削除されたことが確認できます。構文は以下になります。
alter table テーブル名 drop カラム名
ここまでカラムの追加・変更・削除とやってみて1つの共通点があります。
それは全てがalter table命令文が使用されていることです。
つまりカラムに何かしらのアクションを起こしたい時は、alter tableは共通と覚えておけば続きがaddかchangeかdropなのかの差だけと覚えておけば良いということです
さいごに
最後まで読んでいただきありがとうございます!
今回でやっとデータベースを扱う下準備ができたという感じですね。次からは実際にテーブルにデータを入れていろんなコマンドでテーブルを操作していく方法を覚えていきましょう!
この記事を気に入っていただけましたらTwitterでもプログラミングやブログに関してのツイートをリアルタイムでしていますので
ご一緒にフォローもお願いします。