インフラ

【Docker DBコンテナ構築】データベースの種類やSQLの概要解説

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

データベース(DB)とは?

あまりに身近すぎて、
今更感がすごいですが、
改めてデータベースとは何でしょうか?

データベースは、様々なデータを整理して格納するためのシステムですね。
割とそのまんまですね

非エンジニアで、データベースが良くわからないという人でも、
よくドラマとかで、
「データベースから顧客情報から流出したぞ!」とか、
「A企業のデータベースを見れば極秘情報がわかるかも」みたいな、
ハッキングとかサスペンスとかがたまに出てくるので、
イメージ自体はわきやすいと思います。

ただ、データを保存するだけなら、
別にメモ帳とかエクセルとかでも良いのではないか?
みたいな疑問ももしかしたら生じるかもしれません。

もちろん、データの種類によっては、
エクセルとかで保存するケースもあると思いますし、
実際は、併用しているところも多い気がします。

データベースの特徴として、
これから解説しますが、
SQLというデータベースを操作する言語が使えるということがあります。

このSQLを使うと、
大量のデータの検索や更新、削除などを容易に行うことができます。

エクセルとかで大量のデータを扱う場合、
どうしても検索性や更新性が下がることがほとんどで、
特にデータを書き換えたりする必要がある場合、
エクセルだとかなり煩雑になるかもしれません。

データベースの場合、データを書き換えるには、
Updateというsqlを使う必要があるため、
エクセルのように気軽に編集出来るわけではありません。
(エクセルであるある(?)な、あれ間違って編集しちまったよ現象は、
防げますね)

そのため、データの堅牢性に貢献してくれます。

また、データベースは、
プログラムからもアクセスしやすく、
バックエンド言語などを介して、
データベースを更新したりすることが多いと思います。

これにより、大量のデータを効率的に管理し、必要に応じて迅速にアクセスできます。
データベースは、企業や組織が顧客情報、商品データ、取引記録などを保存するのに広く使用されています。

あと、これは完全に推測ですが、
エクセルというアプリケーション自体、
内部的にはデータベースを使っているはずで、
エクセルのデータをエクセルを作っている開発元のDBに
データが格納されているという構造になっているかと思います。

少なくともメモ帳とかに関しては、
データはDBに保存されているはずです。

なので、DBとは、こうした身近に使っているアプリケーションの、
保存先と思っていただければ大丈夫です。

データベースの種類

データベースには様々な種類があります。
主なものには、リレーショナルデータベース(RDBMS)、非リレーショナルデータベース(NoSQL)、
オブジェクト指向データベースなどがあります。

この中でも著名なのが、リレーショナルデータベースで、
リレーショナルデータベースは、表形式でデータを整理し、
SQL(Structured Query Language)を使用してデータを操作します。

非リレーショナルデータベースは、柔軟なデータ構造を持ち、
ビッグデータやリアルタイム処理など、パフォーマンスが求められる要件に適していると思います。

非リレーショナルデータベースについては、
これらの一種である、Redisの概要記事で少し触れているので、
よろしければご参考ください

参考【Redis基礎】Redisとは何か?Redisの基本を解説

本記事では、Redisの概要について解説します。Redisは、最近のモダンなWebシステムでは使われることが増えてきた、NoSQLの一種です。 Redisの知識は、インフラの知識にも、バックエンドの知 ...

続きを見る

RDBMSの種類

さて、これらのデータベースの種類においても、
最も一般的なものとして、リレーショナルデータベースがあることは、
先述のとおりです。

このリレーショナルデータベースにも色々種類があり、
有名どころを紹介します。

MySQL

データベースといったら、これって言われるぐらい、
おそらく最も有名なRDBMSかと思います。

PHP環境下で使われることが多い印象がありますが、
普通にRailsとかでも使われるますし、
本当に幅広く使われている著名なデータベースです。

MySQLは、その柔軟性、信頼性、効率性により、中小規模のアプリケーションに適しています。

PostgreSQL

お次は、PostgreSQLで、
ポスグレ、ポストグレなどと呼ぶことが多い気がします。

これは、私の印象ではRails環境で使うことが多いDBで、
MySQLと同じぐらい広く使われている、
こちらも著名なDBの一つです。

高度な機能(ストアドプロシージャ、トリガー、ビューなど)を備えています。
大規模なデータベースシステムや複雑なクエリに適しており、
企業レベルのアプリケーションで広く採用されています。

Oracle Database

これも有名ではありますが、
私は使ったことはありません。

Oracle Databaseは、企業向けの高機能RDBMSです。
大規模なトランザクション処理、データウェアハウジング、高度なアナリティクス機能を提供します。
ライセンス費用がかかるため、主に大企業や金融機関で使用されます。

Oracle DatabaseとMySQLとかとの最大の違いは、
こちらは商用製品だということです。

MySQLやPostgreSQLはOSSでしたが、
こちらは異なります。

どちらも双方メリデメがあるので、
なんとも言えませんが、
最近の風潮としては、
OSSのDBのクオリティも十分高いことから、
MySQLやPostgreSQLの方が人気が高まっているような印象はあります。

Microsoft SQL Server

こちらもOracleと同じく、
商用製品のDBです。

Microsoft SQL Serverは、主にWindows環境で使用されるRDBMSです。
統合された環境、分析ツール、ビジネスインテリジェンス機能が特徴で、
中規模から大規模の企業向けのアプリケーションに適しています。

SQLite

こちらはOSSです。

SQLiteは、軽量で独立したデータベースエンジンです。
外部のサーバーを必要とせず、アプリケーションに組み込むことができます。
モバイルアプリケーションや組み込みシステムでの使用に適しています。

RailsのデフォルトのDBでもあります。

ただ、Rails環境で、
このDBをそのまま使用して本番環境を構築しているケースは、
私はまだ見たことがありません。

MariaDB

MariaDBは、MySQLから派生したオープンソースのRDBMSです。
MySQLと互換性がありながら、より多くのストレージエンジンや新機能を提供します。
コミュニティ主導の開発が特徴で、透明性とイノベーションを重視しています。

SQLとは?4大命令

さて、データベースの概要については、
触れたのでお次は、そんなデータベースの重要概念である、
SQLについて軽く触れます。

これも現役エンジニアの方からすると、
常識すぎますが、SQL(Structured Query Language)は、
データベースでデータを操作するための標準的な言語です。

SQLを使用することで、データの検索、追加、更新、削除などが可能になります。
SQLはリレーショナルデータベース管理システムで広く使用されており、データベースの操作には不可欠なツールです。

エンジニアの場合、
トレンドによっていろんな言語の文法を覚えたりみたいな、
学習コストがありますが、
SQLは、基本的にあまり文法が変わらず、
かといってDBは基本的にまだまだ使うことが多いソフトウェアなので、
一度身につけてしまうとずっと役に立つかなり学習のコスパがいいものでも有名です。

よくベテランエンジニアの方が、
なにか一つだけ勉強するとしたらSQLをやるということもあるように、
一度身につけてしまえば、ずっと役に立ち、
フロントエンドのように陳腐化する可能性が小さいというのは大きな魅力ですよね。

下記にて、SQLの基本文法を少しだけ紹介します。

最後の章で、
dockerでのdbの環境構築手順について触れているので、
実際に手元で動かして確認したい方は、
そちらをやってからこちらに戻っていただけるとよいかと思います。

読むだけで十分な方は、
このまま進めてもらって大丈夫です。

Select文

まず最初は、Select文です。

SQLといったらSelectでしょって思い浮かべる方も多い、
おそらくいちばんメジャーなSQLの文法です。

SELECT * FROM users;

このような文法です。

これはusersテーブルの全ての列を取得します。

取得する列を絞ることもできます。

select name from users;

ちなみに、上記のように、
SELECTと大文字で書いても、
selectと書いてもどちらでも大丈夫です。

プロジェクトのルールなどに従うのが
いいでしょう。

selectは、他の4大命令と違って、
db自体の内容を書き換えないため、
比較的安全な操作に該当するため、
使用シーンも多い印象です。

データベースのデータを確認したいときに
使う構文ですね。

文法的には、
select 列名 from テーブル名という感じになります。

update文

お次は、update文でして、
これはその名の通り、
データの更新を担当するsqlです。

UPDATE users  SET name = 'tarou'  WHERE name = 'Alice';

これは、name列がAliceの行に対して、
name列をtarouに更新するという命令です。

update文の基本文法としては、

update テーブル名 set 列名1 = 値1, 列名2 = 値2 .... (where句)
という感じで、set句で更新する値を記載するという感じです。

サンプルコードだと、whereという命令がありますが、
これは、テーブルのどの行かを特定するための
命令です。

上記の場合、name列がAliceと指定しています。
where句自体は、select文など他の4大構文でも使います。

ちなみに、where句を省略すると、
全行をupdateかけることになってしまいます。

善行にupdateをかけることは、
かなり少ないと思うので、
基本的にはwhere句は実質必須みたいなものに、
なるかもしれません。

delete文

これは文字通り、削除の命令ですね。
これは、その性質上、かなり慎重に行わないと
大変なことになるやつなので、
そこまで使用シーンは多くないかもしれません。

DELETE FROM users 
WHERE name = 'test';

これは、testという名前のデータを削除します。

ちなみに、deleteにおいて
where句を指定しなかった場合、
全データを削除してしまうため、
基本的にはあまり使わないかと思います。

insert文

次は、データの新規作成にあたる命令です。

INSERT INTO users (name, email) VALUES ('Alice', 'alice@test.com');

これは、usersテーブルに、
nameがAlice、emailがalice@test.comので
データを作成してという命令ですね。

INTOの後にテーブル名を指定して、
その後は、カッコで括って、
データを挿入する列を指定し、
最後は、values句似て、
その列に対応して、
挿入したいデータを指定するという文法です。

dockerでdbコンテナを環境構築する

sqlを試すに際し、
dbの環境構築をする必要がありますが、
実際にローカル環境に構築するのは、
何かと煩雑なため、dockerのmysqlコンテナを使用して、
sqlを試してみます。

dockerについて不安がある方は、
下記の記事や動画などをご参考ください。

参考【Dockerコマンド】よく使うものpull image run execなど

Dockerを使うには、Linuxと同様にいくつかの典型的なコマンドを使いこなす必要があります。 ただ、種類が多いことから「どれがどれだったっけ?」ってなることもしばしば。 本記事では、とりあえずこれ ...

続きを見る

MySQLコンテナの作成

MySQLのDockerイメージを使用してコンテナを作成します。ターミナルで以下のコマンドを実行します。

docker run --name mysql-sample -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

このコマンドは、最新のMySQLイメージを使用してmysql-sampleという名前のコンテナを作成し、
my-secret-pwをrootユーザーのパスワードとして設定します。

コンテナが起動したら、MySQLコマンドラインツールを使用してデータベースに接続します。
コンテナに以下のコマンドを実行します。

docker exec -it mysql-sample mysql -uroot -p

パスワードプロンプトが表示されたら、
ステップ2で設定したパスワード(この例ではmy-secret-pw)を入力します。

データベースとテーブルの作成

次に、テスト用のデータベースとテーブルを作成します。
MySQLプロンプトで以下のコマンドを実行します。

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255));

これでtestdbという名前のデータベースと、
usersというテーブルを作成しました。

サンプルデータをテーブルに挿入します。

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');

最後に、SELECT文を使用してデータを取得します。

SELECT * FROM users;

このコマンドは、usersテーブルの全てのデータを取得します。

 

  • この記事を書いた人
  • 最新記事

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

おすすめ記事はこちら

Vim/Neovimプラグイン 1

プラグインをどれだけ入れるかは、その人の思想なども関係するので、一概にこれがいいというのはないかもしれません。 プラグインを全く入れない人もいれば、100個以上入れる人もいます。 ただそれでも、これだ ...

VimとNeovimの比較 2

本記事では、VimとNeovimの違いについて、解説します。 VimとNeovimの違いについては、普段頻繁にVimなどを使う方でなければ、正直、あまり気にしなくてもいいかなと思います。 ただ、Vim ...

Ruby変数やすべてがオブジェクトについて 3

本記事は、Rubyの基礎文法である、変数や真偽値、論理演算子に触れると同時に、「すべてがオブジェクト」というRubyの特徴的な思想についても解説します。 この思想は、Rubyの文法の根幹になっているの ...

4

エンジニアにおすすめの技術書 書籍学習は、エンジニアの嗜みみたいなところがありますが、 良書というものは、意外とそこまで多くもありません。 そこで本記事では「技術書マニアの筆者が厳選した技術書20選」 ...

5

エンジニアになるには? プログラミングは、専門性が高く自分一人で勉強するのが大変に感じることも多いですよね。 そこで本記事では「おすすめのプログラミングスクール5選」を特徴と、現役エンジニア目線で優れ ...

-インフラ