- 更新日: 2017年05月22日
- 公開日: 2016年02月16日
MySQL入門者必見!MySQLとデータベースの基礎を徹底解説!
プログラミングを学習するにあたって、MySQLやデータベースは非常に重要な概念です。しかし、プログラミング入門者の方は、つい後回しにしてしまいがちな分野ですよね。MySQLについて学習することで、Webサービス開発の全体像が見えてきますので、プログラミング学習者だけでなく、ビジネス側の方々にとっても知っていて損はないと思いますよ。
今回は、入門としてMySQLの基礎を解説致します。
MySQL入門講座
データベースとは?
MySQLとは、データベースの一種です。では、データベースとは何のことでしょうか?
一言でいうと、テーマに沿ったデータの入った箱 かつ 簡単にデータを取り出し可能にしたソフトウェアをデータベースと呼びます。
広い意味でのデータベースと狭い意味でのデータベースがあり、広い意味では電話番号帳もデータベースと言えます。
データベースの使用例
Twitterのようなコミュニケーションツールの場合
- ユーザ認証(ID、パスワード)
- プロフィール(アカウント名、本名、生年月日)
- ツイート(本文、日時)
- フォロー/フォロワー(相手のアカウント名)
- リスト(リスト名、相手のアカウント名)
AmazonのようなECサイトの場合
- ユーザ認証(ID、パスワード)
- プロフィール(アカウント名、本名、住所、etc.)
- 購入履歴(商品名、値段、数量、日時)
- 欲しいものリスト(商品名、追加日、優先度)
上記は一部例であり、実際にはより多くの情報がデータベースに保存されています。
データベースの利点
データの保存方法には、様々な方法があります。
- 人間(脳みそ)
- 紙
- PC内のファイル
- データベース
- etc.
ではどういう用途でデータベースが使われているかを説明するため、これら保存方法の特徴を「正確さ」「速度」「容量」「複数人の書き込み」「コスト」の5つ観点からまとめると、次のようになります。 [table id=11 /]
人の記憶はかなり曖昧で正確さにかけ、また自分以外が利用することはできません。紙は書くのに時間がかかり、たくさん書くのも大変です。ファイルは通常、複数人の同時書き込みに向いておらず、容量にも限界があります。データベースはこれらと比べて、「大容量・高速・整合性」という特徴がデータベースにはあります
Webサービスでは何百万や何千万といったデータを扱うことも珍しくなく、このような膨大なデータをPC内のファイルで扱うと、速度や整合性に問題が発生してきます。
最も分かりやすい例はExcelを利用したデータ管理との比較で、Excelの場合、複数人でファイルを編集した際にデータの整合性が破綻したり、行数が膨大になると動作スピードが低下したりと色々な問題が発生しますが、データベースではこれらの問題が大幅に改善されます。
使用例で紹介したユーザのIDやパスワードといった情報を保存する場合、「大容量・高速・整合性」という3つの利点から、データベースの利用は必須です。
データベースの種類
一口でデータベースと言っても、その種類には様々なものがあり、データを扱う手法としては以下のようなものがあります。
- 階層型
- ネットワーク型
- リレーショナル型
リレーショナルデータベース
リレーショナルデータベースには主に2つの特徴があります。
- データは2次元(行×列)の表形式で表現
- 複数の表を結合(リレーション)して利用可能
文章だけだとなかなか理解しづらいと思いますので、この2つの特徴について、図を交えながら説明していきます。
1.データは2次元(行×列)の表形式で表現
リレーショナルデータベースでは、データを表形式で表現します。例えば商品のデータを「商品ID」「商品名」「価格」・・・のように項目を分け、これを商品の数だけ集めると、次のようになります。
1件のデータを「レコード(行)」、項目を「カラム(列)」、そしてレコードの集まりを「テーブル(表)」と呼びます。
商品が増えた場合はレコードを追加し、項目が増えた場合はカラムを追加することで、商品の情報を一つのテーブル(表)で表現します。
2.複数の表を結合(リレーション)して利用可能
もう1つの大きな特徴は、複数の表を結合(リレーション)して利用できることです。
このように表を結合することで、1つのテーブルとして扱うことができます。
RDBMS
リレーショナル型のデータベースを管理するシステムのことを、RDBMS(Relational DataBase Management System)といいます。
世界中ではたくさんのRDBMSが利用されており、主なものは以下となります。 [table id=12 /]
プログラミング(PHP+HTML)によるDB操作
ここまでで、MySQLとデータベースの基礎については、なんとなく理解していただけたかと思います。 それでは実際にデータベースがどのように使用されているか、プログラミングをしてみましょう。 まずgoods_tableというテーブルがすでに作成されているとします。
そして、mysql_sample.phpというファイルを作成し、ブラウザで表示させてみます。
ファイル名:mysql_sample.php
<?php $goods_data = array(); $order = 'ASC'; if (isset($_GET['order']) === TRUE) { $order = $_GET['order']; } $host = 'localhost'; // データベースのホスト名又はIPアドレス $username = 'username'; // MySQLのユーザ名 $passwd = 'passwd'; // MySQLのパスワード $dbname = 'dbname'; // データベース名 $link = mysqli_connect($host, $username, $passwd, $dbname); // 接続成功した場合 if ($link) { // 文字化け防止 mysqli_set_charset($link, 'utf8'); $query = 'SELECT goods_name, price FROM goods_table ORDER BY price ' . $order; // クエリを実行します $result = mysqli_query($link, $query); // 1行ずつ結果を配列で取得します while ($row = mysqli_fetch_array($result)) { $goods_data[] = $row; } // 結果セットを開放します mysqli_free_result($result); // 接続を閉じます mysqli_close($link); // 接続失敗した場合 } else { print 'DB接続失敗'; } ?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
<style type="text/css">
table, td, th {
border: solid black 1px;
}
table {
width: 200px;
}
</style>
</head>
<body>
<h1>商品一覧</h1>
<form>
<input type="radio" name="order" value="ASC" <?php if ($order === 'ASC') {print 'checked';} ?>>昇順
<input type="radio" name="order" value="DESC" <?php if ($order === 'DESC') {print 'checked';} ?>>降順
<input type="submit" value="表示">
</form>
<table>
<tr>
<th>商品名</th>
<th>値段</th>
</tr>
<?php foreach ($goods_data as $value) { ?>
<tr>
<td><?php print htmlspecialchars($value['goods_name'], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php print htmlspecialchars($value['price'], ENT_QUOTES, 'UTF-8'); ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
</pre>
MySQLのインストール
そうすると以下のように表示されます。
上記のページでは、商品一覧を表示させることができ、かつ表示順を昇順・降順と選ぶことができます。 ECサイトなどでは必ずある機能で、商品情報を格納しているテーブルからデータを表示しています。 このようにプログラミングによってデータベースを操作することにより、Webサイト上にデータベースの内容を出力したりすることができ、同様にデータベースの編集なども行うことができます。
\AIエンジニアに必要なスキルが身に付く/
まとめ
ここまでMySQLとデータベースの入門について説明してきましたが、いかがでしたでしょうか?MySQLを学習することで、Webサービス開発において、できること・理解できることが格段に増えますので、プログラマーに関わらずWebに関わる方々には是非学んでおきましょう。
- この記事を書いた人
- CodeCampus編集部