データベース MySQLの基礎 Part1
ここではMySQLの基礎ということでまずはPart1としてデータベース作成やテーブル作成、データを挿入してレコードを追加するところまでご紹介しようと思います。
説明はmacOSでターミナルを使い、MacにインストールしたMySQLを使っていきます。
Windowsのコマンドプロンプトでも、またローカル開発環境を簡単に構築することができるMAMP(マンプ)やXAMPP(ザンプ)同じです。
最初のMySQLのベースディレクトリのパスが違うくらいです。
MySQLのデータベース操作はphpMyAdminというPHPで開発されたツールもあるのですが、コマンドで操作できるようになったほうが良いのでここではコマンド操作での説明をします。
記述していくSQL文はphpMyAdminでも活かせるのでコマンド操作を覚えて損はないです。というか得しかないです。
黒い画面でコマンド打って操作するかデザインされた画面で操作するかの違いです。
MySQLをコマンドで操作するためのMySQLモニターを使うのですが、まずはそのMySQLモニターを起動させます。
MySQLのベースディレクトリは「/usr/local/mysql」になります。
MySQLのバイナリファイルが入っているフォルダ「bin」のmysqlコマンドでユーザー名とパスワードを入力してMySQLモニターを起動させます。
インストールした時にデフォルトで作成されるrootユーザーで起動します。
/usr/local/mysql/bin/mysql -u root -p
上記のコマンドを打ってEnterキーを押すとパスワードを聞かれます。
パスワードを入力してEnterでMySQLモニターの起動完了です。
プロンプトが「mysql >」になっているのが確認できます。
MySQLモニターではSQL文という言語を書いてデータベースを操作していきます。
まずはじめのどのようなデータベースがあるか確認してみましょう。
データベースの確認
「SHOW DATABASES;」でMySQLのデータベースを確認します。
最初の記述の「SHOW」は確認する時によく出てきます。
デフォルトでいくつかデータベースが作成されています。
特に気にしなくていいです。
また、これから説明する記述では大文字と小文字が入っています。
SQL文が大文字となっています。
これについては最後の方にご説明します。
それでは早速、データベースを作成してみます。
データベースの作成
「CREATE DATABASE」でデータベースを作成していきます。
その後に作成するデータベース名を記述します。
CREATE DATABASE データベース名;
ここでは「project」という名前のデータベースを作成します。
「CREATE」という記述は何か作成する時によく出てきます。
「SHOW DATABASES;」でprojectという名前のデータベースが作成されているのが確認できます。
使うデータベースの指定
さて、これから作成したデータベースにテーブルを作成していきたいと思いますが、どのデータベースを使うのか明記しないといけません。
useコマンドでデータベースを指定します。
use データベース名
SQL文の命令では記述の最後のセミコロン「;」が必要でしたが、useコマンドはSQL文ではないのでセミコロンは必要ありません。
ここらへん、ちょっとだけ違いがあります。
指定したら「Database Changed」といったメッセージが出ます。
使用しているデータベースの確認
SELECT文を使って「DATABASE();」とすることで現在使用しているデータベースが確認できます。
今、どのデータベースで作業しているのか忘れてしまった時などに確認用として。
SELECT DATABASE();
現在、projectのデータベースを使用しているのが確認できます。
テーブルの作成
続いて、テーブルを作成します。
「CREATE TABLE」でテーブルを作成していきます。
その後に作成するテーブル名を記述します。
CREATE TABLE テーブル名
ここでは「users」という名前のテーブルを作成します。
CREATEはデータベースを作成する時も記述しました。書いていくうちにだんだんSQL文に慣れてきますよ。
そしてテーブル作成にはテーブルの構造も作っていきます。
まずはサンプル画像を見てみましょう。
作成するテーブル「users」の構造はその後の開始の括弧「(」から記述していきます。
一行にすると長いのでEnterで改行しながら設定します。
サンプル画像ではカラムをid、name、email、created、modifiedと5つ作ってみました。
ユーザーの番号から名前、Eメール、登録した日時、修正で更新した日時などの情報を登録できるような構造ですね。
カラムを複数作成する場合は行の最後にカンマ「,」で区切るかたちです。
modifiedは最後ですのでカンマで区切らずに改行して終了の括弧「)」を。改行して最後に命令の終了なのでセミコロンで終わり、Enterでテーブルが作成できます。
すこし構造を見てみます。
記述の流れは[カラム名] [データ型] [オプション]になります。
1つ目はカラム名を「id」としてデータ型をINT型(整数値)とします。
その後のオプションでは、「NOT NULL」としてNULL(なにもない)という値は入れれないようにします。この設定がなければデフォルトで「NULL」となります。
idは固有のナンバーとして絶対に設定して情報を管理するのでNULLが入らないようにしなければいけません。
その後の「AUTO_INCREMENT」では自動で番号を割り当てていきます。
「PRIMARY KEY」は固有のナンバーなどに設定することで他のデータとかぶることがなくなり、抽出や検索を高速に行うことができるものです。
リレーショナルデータベースでは各テーブルごとにプライマリーキー(主キー)を設定することが多いです。
2つ目、3つ目の「name」と「email」はカラム名のあと、文字列のデータ型「VARCHAR」として格納する最大文字数を記述します。
100文字と適当に入れてしまいましたが、そんなに長い名前の人はいないと思うので50くらいでもいいかと思います。
「created」と「modified」では、データ型を「DATETIME」としてタイムスタンプ値を認識するようにします。
ちゃんと作成できたら「Query OK」とメッセージが表示されます。「0 rows affected」はまだこの時点では何もデータがないので中身に影響してないよ、変わりわないよということです。
テーブルの確認
作成したテーブルを確認してみましょう。
「SHOW TABLES;」でデータベースにあるテーブルを確認することができます。
SHOW TABLES;
SHOWをつけるあたり、もう慣れてきましたね。
テーブルの構造を確認
作成したテーブルの構造を確認します。
「DESC」のあとにテーブル名を記述してテーブルの構造を確認できます。
DESC テーブル名;
Field(カラム)、Type(データ型)、Null(null値の設定)、Key(keyの情報)、Default。
Defaultはデータを追加する時にカラムに値が指定されなかった時のデフォルト値の設定になります。
一番したの枠外の「5 rows in set」は、レコードが5つ設定されているよというメッセージです。
レコードの追加
レコードの追加にはINSERT文を使います。
INSERT INTO テーブル名
挿入する「INSERT」、〜の中にという「INTO」のあとにテーブル名を記述して、指定したテーブルの中にこれから入力する内容を挿入する流れになります。
一行だと長いのでEnterで改行しながら記述していきます。
データを挿入する書き方は2パターンあります。
INSERT INTO テーブル名 VALUES (データ1, データ2, ...);
INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (データ1, データ2, ...);
サンプルではカラムを指定して挿入する方法を取ります。
idはオートインクリメントで自動連番なので無視します。
INSERT INTO users (name, email, created, modified) VALUES ("名前", "メールアドレス", NOW(), NOW());
文字列はダブルクォーテーション「””」で囲います。タイムスタンプ値が認識できるデータ型では「NOW()」とすることでその時々の日時を入れることができます。
レコードの確認
挿入したデータの確認をしていきましょう。
SELECT文を使います。
SELECT * FROM テーブル名;
idは自動連番で1つ目なのでもちろん1ですね。
あとはname、email、created、modifiedに各データが挿入されているのが確認できます。
レコードを複数追加
レコードを複数追加する際は一つ一つ挿入するのではなく、カンマ「,」区切りで一気に複数のレコードを追加できます。
大文字と小文字
ここまで書いてきたSQL文ですが、SQL文の部分は大文字で書いてきましたがすべて小文字で説明する方もいます。
大文字も小文字も違いはなく、エラーなくしっかりと動いてくれますのでどちらで書いても良いです。
ただ他のプログラミング言語、例えばPHPなどでデータベースに接続してデータを取得する時にSQL文をエディタに書いていくのですが以下のような違いがあります。
こちらも大文字と小文字でどちらもエラーなく動きますが見た目の問題ですかね。
大文字のほうがSQL文がわかりやすいかと思います。
コマンドでの操作ではどちらでもいいですが、プログラミングでエディタで書くときは大文字のほうが良いかもしれません。
SQL文の綺麗な書き方は大文字で書くことです。
複数人で作業を行う場合は記述方法を取り決めてプロジェクトを進めるといいです。
少し長くなりましたのでPart1はこのへんで。
Part2ではさらにデータベースの操作をご紹介します。
↓ ↓ ↓
データベース MySQLの基礎 Part2