データベースはデータを集めて表のように扱います。操作するにはSQLという言語でクエリ(専用の命令文)を書いていきます。ここではこれまで作ってきたBaseballサークルサイトにデータベース(DB)を使った掲示板を作っていきましょう。
データベースとは?
データベースとはその名の通りデータの基地であり、データを一箇所に集めておきます。ある決まった形式で(多くは表形式)でデータを揃えておき、後から探しやすくするのが目的です。
データベースはたくさんの種類がありますが、ここではPHPと相性がいいMariaDBを使います。
MariaDBとは?
MariaDBはリレーショナルデータベース(RDB)という種類のDBで広く使われているオープンソースDBで、高速で動作し、使いやすく、利用料が無料です。
リレーショナルデータベースとは?
リレーショナルデータベースは、いくつかの表からできています。表のことをテーブル、列をカラム、行をレコードといいます。各カラムには型があり、カラムごとにデータの形式を決めていきます。
MariaDBでのデーターの型
MariaDBでのデーターの型は大まかに➀数値型、➁日付・時刻型、➂文字列型の3種類があります。どういったデータを保存するかによって、この3つの中から適切な型を選ぶ必要があります。
➀数値型
INT | 整数型 | 連番、個数など |
DOUBLE | 浮動小数点数型 | 体重など小数点を含むもの |
➁日付・時刻型
DATE | 日付型 | 日付 |
DATETIME | 日付時刻型 | 日付と時刻 |
➂文字列型
CHAR | 固定長 文字列型 | 郵便番号など桁数が決まっているもの |
VARCHAR | 可変長 文字列型 | 名前、住所など |
TEXT | 文字列型 | 本文などの長い文章 |
データベース設計
まずはデータベース(DB)名を決めていきます。今回はBaseballサークルサイトでの掲示板を作るので、「baseball」という名にします。
次に、掲示板のデータを保存するテーブルを設計していきます。テーブル名は「bbs」とします。今回、bbsテーブルには➀書き込み番号、➁名前、➂書き込みタイトル、④本文、⑤書き込み日時、以上の内容を書き込んでいきます。というわけで一旦、以下の設計とします。
カラム名 | 型と長さ | NOT NULL制約 | 説明 |
id | INT | 〇 | 書き込みの通し番号。主キー。自動採番 |
name | VARCHAR(255) | 〇 | 書き込んだ人の名前。長さは255文字まで |
title | VARCHAR(255) | – | 書き込みタイトル。長さは255文字まで。タイトルがない場合は無題と表示 |
body | TEXT | 〇 | 本文 |
date | DATETIME | 〇 | 書き込み日時 |
pass | CHAR | 〇 | 削除パスワード。4文字の数値文字列 |
主キーを決める
idは主キーとなります。主キーとは、そのテーブルの中でレコード(行)を識別する意味的な値のことです。主キーは重複させない性質をもたせることが重要です。例えば、クラス名簿を作ったときはどうでしょうか。同姓同名の人がいるかもしれないので、氏名は主キーに不向きです。しかし、各自に振られた出席番号は、そのクラスの名簿では重複しないので主キーに適しています。
NOT NULL制約
NOT NULL制約とは必須項目のこと、つまり、そのカラムには必ずデータを入れるという約束をします。NOT NULL、つまり空白、ゼロではないということ。
データベースの作成
設計ができたので、それではMariaDBに接続してデータベースを作成してみましょう。
まずはコントロールパネルのShellボタンからコマンドプロンプトを起動します。
次に「mysql -u root -p」と入力。ユーザーの-uのオプションでroot(管理者権限のユーザー)としてログインします。-pのオプションを指定しているので、パスワード入力します。XAMPPをダウンロードしたときに設定したパスワードです。
ログインできたら次のクエリ(データベース用の命令)をしましょう。
「create database ~;」 これはデータベースを作成するための構文です。~にはデータベース名をいれます。コマンドの末尾にはセミコロン(;)をつけ、終わりを明示します。
ファイルを作成したら、次のクエリを出します。「use ~」でファイルを利用する選択をします。するとMariaDBの後ろにファイル選択した「baseball」名が表示されていればOKです。
ちなみに、DROP DATABASE文で作成したデータベースを削除できます。例えば「DROP DATABASE baseball;」です。データベース内に作成されていたテーブルも一緒に削除されます。
テーブルの作成
次にcreate table テーブル名(~ でテーブルを作成していきます。AUTO_INCREMENTは自動採番でレコード(行)が追加されるごとに1,2、3と自動的に番号が割り当てられます。PRIMARY KEYは主キーであることを表します。
ちなみに、DROP TABLE文で作成したテーブルを削除できます。例えば「DROP TABLE bbs;」です。登録されていたレコード(行)は削除されますが、データベース自体は残ります。
ユーザーの作成
データベースを操作できるユーザーを作成し、セキュリティ対策をします。MariaDBをインストールしたばかりの状態では、rootという管理者権限を持つユーザーが作られます。しかし、rootはすべてのデータベースを操作できてしまうためセキュリティ上よくないですね。
そこで使うデータベースだけを操作できるユーザーを作成していきましょう。ユーザーを作成するGRANT構文を使います。
GRANT 権限 ON データベース名. テーブル名 TO 'ユーザー名'@'ホスト名' INDENTIFIED BY 'パスワード';
実際には下記のように入力しました。
GRANT ALL ON baseball.* TO ‘baseballuser’@’localhost’ IDENTIFIED BY’ ‘パスワード’;
上記のクエリ(命令)の内容として、「localhost上のbaseballuserさんに、baseballデータベースのすべてのテーブルの権限ALLを与えます。パスワードは〇〇です」になります。
実際、与えられる権限は多種ありますが、ここではALL(すべての権限)を指定しました。データベース名とテーブルはドット(.)でつなぎ、特定のデータベースの特定テーブルへの権限を与えることができます。
今回はbaseballuserさんがbaseballデータベースのすべてのテーブルを操作できるようにするため、「baseball.*」として*を使っています。この*はワイルドカードといって「すべて」を表す記号になります。
ユーザーを作成したらMariaDB内部の一時データを削除して設定を反映させるため、次のクエリを実行します。するとユーザー情報が反映されます。
FLUSH PRIVILEGES;
作成したユーザーの確認
再度コントロールパネルのShellから起動し、次のように入力して確認していきましょう。
mysql -u baseballuser -p を入力、enter →パスワード入力
そうしましたら次に「use データベース名(baseball);」、その次に「DESC テーブル名(bbs);」と入力してみましょう。
作成したテーブルの構造が表になって表示されます。これでパスワード付のユーザーが作成できました。