MySQL: MySQLの概要とデータベースの基本概念

MySQLは、世界で最も普及しているオープンソースのリレーショナルデータベース管理システムであり、データの保存やクエリの実行を簡単かつ効率的に行えます。

このチュートリアルは、経験のない初心者向けに作成されています。データベースの基礎から始まり、MySQL を使ったデータ管理を自在に扱えるようになるまで段階的に解説しています。

1. 学習内容



2. ある開発者の実話

(1) 課題:Excelではもはや対応しきれない

あるEコマースのオペレーションマネージャーに、緊急の任務が割り当てられた。

「過去12か月間の販売動向を、5,000人の顧客と30,000件の注文を対象にまとめ、明日の朝、CEOに報告してください。」

Excelファイルを開く:100,000行以上のデータ、ファイルサイズ 50 MB

問題は次々と起こった:

(2) データベースソリューション

MySQL を使った再設計:

SQL
-- Create a Customer Table
CREATE TABLE customers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(150)
);

-- Create the Orders Table
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    customer_id INT,
    amount DECIMAL(10,2),
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);

-- One SQL Identify Annual Sales Trends
SELECT 
    DATE_FORMAT(order_date, '%Y-%m') AS month,
    COUNT(*) AS total_orders,
    SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= '2025-07-01'
GROUP BY month
ORDER BY month;

収量の比較:

次元 Excel MySQL
10万行のクエリ 30秒以上 1秒未満
マルチテーブル結合 手動のVLOOKUP 自動結合
共同編集 ファイルの競合 競合のない同時読み書き操作
データの更新 手動による更新 最新データのリアルタイムクエリ
データセキュリティ データ損失のリスク トランザクションおよびバックアップの保護


3. データベースとは何か?

データベースとは、データ構造に従ってデータを整理、保存、管理するための保管場所のことです。

(1) データベースとファイルストレージの比較

100%
graph TB
    A[Data Storage Methods] --> B[File Storage]
    A --> C[Database]
    B --> D[Excel / CSV / TXT]
    B --> E[Manual Management,Low efficiency]
    C --> F[Structured Storage]
    C --> G[Efficient Queries,Safe and Reliable]
ディメンション ファイルストレージ データベース
データ量 数千行 数百万~数億行
クエリ速度 遅い(ファイル全体スキャン) 速い(インデックス最適化)
同時アクセス 未対応 複数のユーザーによる同時読み取り/書き込みアクセスをサポート
データの整合性 保証されない 制約条件およびトランザクションは保証される
セキュリティ ファイルレベル ユーザー権限 + 暗号化

(2) データベースのカテゴリ

100%
graph TB
    A[Database] --> B[Relational Database RDBMS]
    A --> C[Non-relational database NoSQL]
    B --> D[MySQL / PostgreSQL]
    B --> E[Oracle / SQL Server]
    B --> F[SQLite]
    C --> G[Key-value type: Redis]
    C --> H[Document-based: MongoDB]
    C --> I[Column Type: Cassandra]
    C --> J[Graph Database: Neo4j]
タイプ 代表的な製品 データモデル 適用シナリオ
リレーショナル MySQL、PostgreSQL テーブル(行+列) 構造化データ、トランザクション処理
キー・バリュー Redis キー・バリューペア キャッシュ、セッション、リーダーボード
ドキュメント型 MongoDB JSON/BSON ドキュメント 半構造化データ、コンテンツ管理
カラムファミリーの種類 Cassandra カラムファミリー ビッグデータ分析、時系列データ
グラフデータベース Neo4j ノード + エッジ ソーシャルネットワーク、レコメンデーションシステム
💡 ヒント: MySQLはリレーショナルデータベースです。データはテーブルの形で格納され、テーブル間で関係を確立することができます。



4. リレーショナルデータベースの基本概念

(1) 表

テーブルは、データベースにデータを格納するための基本単位であり、で構成されています。

100%
graph LR
    subgraph customers Table
        direction TB
        H[id | name | email | created_at]
        R1[1 | Alice | alice@email.com | 2025-01-15]
        R2[2 | Bob | bob@email.com | 2025-02-20]
        R3[3 | Charlie | charlie@email.com | 2025-03-10]
    end
用語 定義
データの集まり customers
特定のレコード アリスの詳細情報
データの属性 name
主キー 各行を一意に識別するフィールド id
外部キー 別のテーブルを参照するフィールド orders.customer_id

(2) 関係の種類

100%
erDiagram
    CUSTOMERS ||--o{ ORDERS : "A customer has multiple orders"
    ORDERS ||--|{ ORDER_ITEMS : "An order contains multiple line items"
    PRODUCTS ||--o{ ORDER_ITEMS : "An item appears in multiple orders"
関係の種類 説明
1対1(1:1) あるレコードが別のレコードに対応する ユーザー ↔ IDカード
1対多 (1:N) 1つのレコードが複数のレコードに対応する 顧客 → 注文
多対多 (M:N) 複数のレコードが互いに対応し合う 学生 ↔ 科目(履修登録フォームを介して)

(3) SQL言語の分類

SQL(構造化問い合わせ言語)は、リレーショナルデータベースを扱うための標準的な言語です。

カテゴリ 正式名称 キーワード 目的
DDL データ定義言語 CREATE/ALTER/DROP データベース構造を定義する
DML データ操作言語 INSERT/UPDATE/DELETE データの挿入、更新、削除
DQL データクエリ言語 SELECT データのクエリ
DCL データ制御言語 GRANT/REVOKE 権限管理
TCL トランザクション制御言語 COMMIT/ROLLBACK トランザクション制御


5. MySQLの歴史

(1) バージョン履歴

100%
timeline
    title MySQL Version History
    1995 : MySQL 1.0 Published
         : From Sweden MySQL AB Company Development
    2000 : MySQL 3.23
         : Supports transaction processing
    2003 : MySQL 4.0
         : Support UNION Search
    2005 : MySQL 5.0
         : Supports stored procedures、View、Trigger
    2008 : Sun Acquisition MySQL AB
    2010 : Oracle Acquisition Sun
         : Obtain MySQL Ownership
    2013 : MySQL 5.6
         : InnoDB Full-Text Search
    2016 : MySQL 5.7
         : JSON Support、Performance Improvements
    2018 : MySQL 8.0
         : Window Functions、CTE、Characters
    2024 : MySQL 8.4 LTS
         : Long-Term Support Version
    2024 : MySQL 9.0 Innovation
         : Latest Innovative Version

(2) MySQLの設計思想

MySQLの設計上の基本原則:

シンプルさを第一に

パフォーマンス最優先

オープン・エコシステム



6. MySQLの主な利点

(1) メリットの比較

ディメンション MySQL PostgreSQL Oracle SQL Server
価格 無料(オープンソース) 無料(オープンソース) 高価(商用) 高価(商用)
学習難易度 ⭐ 簡単 ⭐⭐ 普通 ⭐⭐⭐ 難しい ⭐⭐ 普通
読み取り性能 ⭐⭐⭐ 極めて高速 ⭐⭐ 高速 ⭐⭐ 高速 ⭐⭐ 高速
地域活動 ⭐⭐⭐ 非常に高い ⭐⭐ 高い ⭐ 普通 ⭐ 普通
利用事例 Webアプリケーション、eコマース 複雑なクエリ、GIS 大規模エンタープライズシステム Windowsエコシステム

(2) 代表的なユースケース

100%
mindmap
  root((MySQL Applications))
    Web Development
      Blog System
      E-commerce Platform
      Social Networks
      Content Management
    Enterprise Applications
      ERP System
      CRM System
      Inventory Management
      Order Processing
    Data Analysis
      Log Storage
      User Behavior
      Report Statistics
    Mobile Apps
      App Backend
      Game Data
      Push Notification System

MySQLは誰が利用しているのか?

会社 目的
Meta(Facebook) ユーザーデータ、ソーシャルグラフ
Twitter ツイート、ユーザープロフィール
GitHub コードリポジトリ、ユーザーデータ
Airbnb 掲載物件、予約、ユーザー
Shopify ECサイトのバックエンド、商品、注文
Booking.com ホテルの予約、ユーザーレビュー


7. MySQLの簡単な紹介

(1) 3つのステップでMySQLに接続する

ステップ コマンド/アクション
1. インストール 1つのコマンドでDockerを起動する(詳細はレッスン2を参照)
2. 接続 mysql -u root -p
3. 検証 SELECT VERSION();

📖 次のレッスンでは、クロスプラットフォームでのインストール(Windows/Mac/Linux/Docker)、MySQL Workbenchへの接続、およびセキュリティ設定について詳しく解説します。このセクションでは、概要を簡単に紹介するのみです。

▶ サンプル:1つのコマンドでDockerを起動する

BASH
# Pull and Start MySQL 8.0 (see Lesson 2 for details)
docker run -d --name mysql-tutorial \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=MyPass123! \
  mysql:8.0

# Enter MySQL Command Line
docker exec -it mysql-tutorial mysql -u root -pMyPass123!

▶ サンプル:接続後の簡易確認

SQL
-- View MySQL Version
SELECT VERSION();

-- View All Databases
SHOW DATABASES;
▶ 試してみよう

出力:

TEXT 📖 参照専用
+-----------+
| VERSION() |
+-----------+
| 8.0.36    |
+-----------+

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

▶ サンプル:最初のデータベースとテーブルの作成

SQL
-- 1. Create a Database
CREATE DATABASE my_first_db;

-- 2. Using the Database
USE my_first_db;

-- 3. Create a user table
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 4. Insert Data
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('Bob', 'bob@example.com');

-- 5. Query Data
SELECT * FROM users;
▶ 試してみよう

出力:

TEXT 📖 参照専用
+----+----------+-----------------+---------------------+
| id | username | email           | created_at          |
+----+----------+-----------------+---------------------+
|  1 | Alice    | alice@example.com | 2026-07-03 10:30:00 |
|  2 | Bob      | bob@example.com   | 2026-07-03 10:30:01 |
+----+----------+-----------------+---------------------+

▶ サンプル:データに対するCRUD操作

SQL
-- Conditional Query
SELECT username, email FROM users WHERE username = 'Alice';

-- Update Data
UPDATE users SET email = 'alice_new@example.com' WHERE id = 1;

-- Delete Data
DELETE FROM users WHERE id = 2;

-- Count the number of users
SELECT COUNT(*) AS total_users FROM users;
▶ 試してみよう

❓ よくある質問

Q MySQLとSQLの関係はどのようなものですか?
A SQLはデータベースを操作するための標準言語(「英語」のようなもの)であり、MySQLはSQL標準を実装したデータベースソフトウェア(「イギリスで話されている英語」のようなもの)です。
Q MySQLは無料ですか?商用利用は可能ですか?
A MySQL Community Editionは無料のオープンソース(GPLライセンス下)であり、商用利用が可能です。ただし、MySQLのソースコードを改変して配布する場合は、その改変版もオープンソースとして公開する必要があります。Oracleは、追加のエンタープライズ機能を提供する商用版(有料)を提供しています。
Q MySQLとMariaDB、どちらを選ぶべきですか?
A MariaDBはMySQLのフォークであり、構文の互換性が非常に高いです。新規プロジェクトでは、MySQL 8.0以降が主流の選択肢となっています。Oracleのオープンソース戦略に懸念がある場合は、MariaDBが優れた代替手段となります。
Q MySQLを学ぶ前に、プログラミング言語を学ぶ必要がありますか?
A いいえ。SQLは、自然な英語に似た構文を持つ独立した言語です。MySQLのコマンドラインで直接学ぶことができます。後のレッスンでは、Node.jsやPythonを使ってMySQLに接続する方法について解説します。
Q MySQLはどのような規模のプロジェクトに適していますか?
A MySQLは、小規模な個人プロジェクトから大規模なエンタープライズアプリケーションまで、あらゆる用途に適しています。1つのテーブルに数億行のデータを格納することができ、データベースやテーブルのシャーディングを活用すれば、さらに大規模なシステムにも対応可能です。Meta、Twitter、GitHubはいずれもMySQLを採用しています。
Q MySQLはWindows、Mac、Linuxで利用できますか?
A はい。MySQLはすべてのプラットフォームを公式にサポートしています。Dockerを使用してインストールすることをお勧めします。一度設定すれば、どこでも実行できます。

📖 まとめ


📝 練習問題

  1. 基本演習(難易度:⭐):Docker を使用して MySQL 8.0 をインストールします。接続したら、SELECT VERSION(); を実行してバージョン番号を確認してください。

  2. 上級問題(難易度 ⭐⭐)school という名前のデータベースを作成し、その中に students(id, name, age, grade)という名前のテーブルを含め、5件のレコードを挿入し、すべてのレコードをクエリで取得してください。

  3. チャレンジ問題(難易度:⭐⭐⭐)courses テーブルと、それに関連する student_courses テーブル(多対多の関係)を作成し、適切なフィールドを設計した上で、JOIN を使用して、特定の学生が履修したすべてのコースをクエリで抽出してください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%