無料オープンソースDB MySQL入門 その1 - MySQLのインストール -
MySQLとは?
MySQLではWebアプリケーションにおいてデータを保存するのに使われます。いわゆるデーターベースですね。Webアプリケーションは様々なユーザーデータや商品情報、取引情報などデータを保存していく必要があるのでほとんどのWebアプリケーションで使用されています。
MySQLはその一つでオープンソースのソフトウェアなため、無料で利用できます。
https://dev.mysql.com/downloads/
他にもデーターベースには、postgresSQL, Oracleなどが有名です。Oracleは割と大規模なシステムに利用されていて銀行系のシステム、業務パッケージシステムなどでの利用が多く、postgresSQLはMySQLと同様オープンソースのデータベースになるので個人でインストールして使用してみるということが簡単にできます。
多くのITスタートアップ、ベンチャーはMySQLかPostgresSQLを利用しています。それぞれ若干の操作方法や特性の違いがありますがデータベースを触るのが初めてという人はどちらか片方に決めて操作方法になれるのがよいと思います。(将来的にRailsやLaravelなどのWebアプリケーションフレームワークを使えばDBの違いをあまり意識せずとも使えます。)
リレーショナルデータベース(RDBS)とは?
MySQLは(ORACLE,PostgresSQLも)データーベースの中でもリレーショナルデーターベースに分類されます。リレーショナルデーターベースとは、関係モデルにもとづいて設計開発さっるデーターベースです。
関係モデルとは、組(タプル)、属性、定義域、候補キーなどに・・・・というような難しい説明もありますが、ざっくりいうとテーブルと呼ばれる表とカラムと呼ばれる列、レコードと呼ばれる行で構成されたデータの構造になります。
下にRDBSのテーブルの例を載せましたが、データベースの世界では下の表全体をテーブル(Table)と呼び、id, name, age, sex, createdat, updatedatなどの列部分をカラム(Column)、行部分をレコード(Record)と言います。
また、一つのデータベースにはテーブルが複数あるのでデータベースに接続して全テーブルを表示するコマンドを叩くと以下のように複数のテーブルが表示されます。
一般的には一つのアプリケーションに対して一つのデーターベースを割り当てる形で設計されることが多いので、例えばwebnariというブログサービスを作ろうとした場合には、以下のような形でデータベースの構造を設計しておきます。
Database :
webnari
Table :
users <- ユーザー情報を格納するテーブル, posts <- ポストを保存しておくテーブル, comments <- ポストに対するコメントを保存しておくテーブル, categories <- ポストのカテゴリを保存しておくテーブル
一度にたくさん覚えるのは大変なのでここでは
- データベースがデータベース、テーブル、カラム、レコードから構成されること
- データベースが一番大きい構成単位でデータベースが複数のテーブルをもつこと
を覚えておきましょう。システム開発において概念の大小関係と構造を理解するのはとても大事なことなのでデータベース、テーブル、カラム、レコードがそれぞれどのような構造になっているのかは必ず理解しておきましょう。
MySQLをMacにインストール
ここまでで、データベースの概念はざっくりおさえられたと思うので次は実際にインストールしていきます。
macでのMySQLインストールは簡単で以下のコマンドを実行すればインストールできます。
brew update
brew install mysql
※Macのパッケージ管理ツールhomebrewのインストールがまだの人は以下のコマンドでインストールしましょう。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
インストールが完了したら下記コマンドでmysqlサーバーを起動させましょう。
mysql.server start
データベースに接続
インストールが完了したらデータベースに接続してみます。
mysql -u root
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1718
Server version: 5.7.17 Homebrew
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
これでデーターベースには接続できました。せっかくなのでなにかコマンドを打ってみましょう。
show databases;
このコマンドはMySQL内に存在するデータベースの一覧を表示するコマンドです。
データーベースとの接続を切る場合には
exit;
とします。
データーベースを作成
MySQLへの接続が確認できたら今度は実際にデーターベースを作成しましょう。 コマンドは以下の通りです。
create database my_blog;
コマンドがデータベースが作成されていることを確認しましょう。
show databases;
作成したデータベースに接続するには
use my_blog;
とします。
データーベースをユーザーを作成
ここまでデータベースでの作業はrootユーザを使用して作業してきましたが、実際の現場で rootユーザを使用して作業を行なっているところは稀です。rootユーザは管理者ユーザーでデータベースの削除やユーザーのパスワード変更などが自由にできてしまう 強い権限をもっているので、通常はデータベース専用のユーザを作成し、そのユーザは特定のデータベースにしか アクセスできないような権限を設定します。
my_blogのユーザを作成
create user my_blog identified by 'my_blog';
これでユーザが作成できたので、作成したユーザを使って接続してみましょう。
mysql -u my_blog -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1722
Server version: 5.7.17 Homebrew
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql<
mysql< show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)
myblogユーザで接続しましたが、さきほど作成したmyblogデータベースが見当たりません。 ユーザは最初に作成された状態ではinformation_schema以外の情報にアクセスする権限がないため このようになっています。
下記コマンドでmy_blogに権限を付与してあげましょう。
grant [権限の種別] on [DB名].[テーブル名] to [ユーザ名];
grant all on my_blog.* to my_blog;
権限を付与する場合は、rootユーザで再度接続しなおします。
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1723
Server version: 5.7.17 Homebrew
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all on my_blog.* to my_blog;
Query OK, 0 rows affected (0.02 sec)
mysql>
次にmyblogユーザで接続すると無事にmyblogデータベースが見れるようになっています。
mysql -u my_blog -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1728
Server version: 5.7.17 Homebrew
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| my_blog |
+--------------------+
2 rows in set (0.00 sec)
まとめ
データベース操作はWebエンジニアにとって必須の知識です。フレームワークを使用するようになるとだんだん直接データベースに接続してデータを変更するという機会も減ってくるかもしれませんが、データベースを更新するアプリケーションも結局は今回のような手で叩いたコマンドをアプリが代わりに打ち込んでくれているだけですので、全体の挙動を理解するためにもデータベースの操作を覚えておくことは非常に大切になります。
システムの保守・運用などをやっているとデータの修正をしたりすることもあるのでデータベースの操作をしっかりと覚えて、安心してデータベースを操作できるようになりましょう。
次回は、テーブルを作成してデータの作成・参照・更新・削除をやっていきます。