Webアプリケーションを構築する上で、データベースの利用は欠かせないものです。
今回はMySQLデータベースの基本についてご説明します。
Webアプリケーションにおけるデータベースとは
まずはWebアプリケーションにおけるデータベースの位置づけや役割について触れます。
データベースの役割
データベースとは、PHPなどのプログラムで発生したデータを保存する場所になります。
データベースがあることで、様々な情報(履歴情報、ブログ記事、会員情報、などなど)は永続化され、データとして利用することができるようになります。
また、データベース機能を提供する一連のシステムを、データベースエンジンとも呼びます。
RDB(関係データベース)とは
データベースにも種類があります。
通常は、Webアプリケーションにおけるデータベースとは、RDB(Relational Database)のことだと思って置いて大丈夫です。
また、RDBを管理するシステムを指して、RDBMS(Relational Database Management System)と呼びます。
RDBでは、エクセルの表のように、列と行で情報のまとまりを管理し、その情報同士を連携させることで大規模なデータ構造を管理しています。
表はテーブル、列はフィールド、行はレコードと表現されます。
MySQLの位置づけ
RDBMSには様々な種類があり、商用のものでは、『SQL Server』『Oracle』などがあります。オープンソースでは、『MySQL』『PostgreSQL』というものがあります。
『MySQL』『PostgreSQL』のどちらもメジャーで、実務での実績が豊富です。
また、今回はレンタルサーバなどにインストールされていることが多い、MySQLを教材にしています。
SQLとは
データベースが倉庫だとしたら、SQLはデータを出し入れする運搬者です。
リレーショナルデータベースの扱いに対応した、専用の言語があるからこそ、アプリケーションから効率的にデータを扱うことができるのです。
プログラミング言語からのSQL利用
プログラミング言語には、データベースエンジンへのアクセス用関数が用意されており、SQLを介してデータのやりとりを行います。
データ操作言語(Data Manipulation Language, DML)
SQLの種類には2種類があり、ひとつはデータ操作言語(DML)。もうひとつがデータ定義言語(DDL)です。
まずは、アプリケーション上で主に使うことになるデータ操作言語から説明します。
通常は、SELECT、INSERT、UPDATE、DELETEの4種類からなり、データベースエンジンによってさらに別のものが加わります。
ここでは、以下のようなデータを例にとって、各構文の説明をします。
『くだもの』テーブルとして、『ID,名前,色,味』のフィールドがあり、4つのレコードが登録されている状態です。
[くだもの]テーブル
ID | 名前 | 色 | 味 |
---|---|---|---|
1 | りんご | 赤 | 甘酸っぱい |
2 | レモン | 黄 | 酸っぱい |
3 | メロン | 緑 | 甘い |
SELECT
データを検索する際に利用します。
SELECT ID, 名前, 色, 味 FROM くだもの WHERE 1
上記では、すべての行が結果として出力されます。
SELECT * FROM くだもの WHERE 1
と書くこともできます。
SELECT ID, 名前, 色, 味 FROM くだもの WHERE ID = '2';
上記では、ID=2のレモンの行が結果として出力されます。
INSERT
データを挿入する際に使われます。
INSERT INTO くだもの (ID, 名前, 色, 味) VALUES ('4', 'スイカ', '緑', '甘い');
上記では、スイカの行が追加されます。
UPDATE
データを更新する際に使われます。
UPDATE くだもの SET 色 = '青', WHERE ID = "1";
上記では、りんごの行の色が、「青」に更新されます。
DELETE
データを削除する際に使われます。
DELETE FROM くだもの WHERE ID = "1";
上記では、りんごの行が削除されます。
データ定義言語(Data Definition Language, DDL)
データ定義言語では、データの器(テーブルとフィールド)自体を定義します。
データベースエンジンは、データ定義構文の書かれたSQLを受け取ることで、テーブルを作成、更新します。
CREATE
テーブルを作成する際、ストアドファンクションを作成する際などに使われます。
CREATE TABLE くだもの ( ID int(10), 名前 varchar(20), 色 varchar(20), 味 varchar(20) );
上記では、くだものテーブルを作成します。
DROP
テーブルを削除する際、ストアドファンクションを削除する際などに使われます。
DROP TABLE くだもの;
上記では、くだものテーブルを削除します。
ALTER
テーブルの定義を変更する際などに使われます。
ALTER TABLE `くだもの` CHANGE `色` `色` VARCHAR(30);
上記では、くだものテーブルの色フィールドの型(文字列)を、最大文字数20文字から30文字に変更しています。
TRUNCATE
テーブルを空にする際などに使われます。
TRUNCATE TABLE くだもの;
上記では、くだものテーブルを空にします。
フィールドの型について
テーブルを構成するフィールドには、プログラミング言語のように、様々な型が存在します。ここでは、主要な型について紹介したいと思います。
以下を使いこなせば、最低限実運用に耐えるシステムを構築できます。(最悪、intとtextだけでもなんとかなります)
int
4バイトの整数型です。
-21億~+21億まで扱えるため、数値型が必要な場合はintを利用すれば、大抵はまかなえます。
bigint
8バイトの整数型です。
4バイトのintでは足りない、甚大なデータに利用します。
float
4バイトの浮動少数型です。
有効桁数は7桁となります。
varchar
文字数を指定するタイプの文字列型です。
text
文字数を指定しないタイプの文字列型です。
varcharよりも長い文字数が必要な文字列フィールドで利用します。
datetime
日時型です。
年月日時分秒(2000-12-31 23:59:59)を管理できます。
timestamp
日時型です。
年月日時分秒(2000-12-31 23:59:59)を管理できます。
datetimeとtimestampは非常によく似ており、通常はどちらでもほとんど同じです。
datetimeの方は、例えば「2000-12-31 23:59:59」だとすると、この情報をそのまま文字列として内部保存しています。
一方、timestampは、内部的にはunixtimeという形式で保存しています。
UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日真夜中(午前0時0分0秒)の時刻からの形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。
UNIX時間 – Wikipedia
時差などの処理を含めて考えると、timestamp型の方がおすすめです。
date
日付型です。
年月日(2000-12-31)を管理できます。
time
時間型です。
時分秒(23:59:59)を管理できます。