MySQL入門:インストールからSQL・テーブル設計・運用まで
MySQL は世界でもっとも広く使われているリレーショナルデータベースのひとつで、Web アプリケーションやデータ分析の裏側を支える定番のソフトウェアです。このページでは、はじめてデータベースに触れる人がインストールから SQL の基本、テーブル設計、結合や集計、運用や性能改善までを順番に学べるように整理しています。基礎から積み上げていくことで、PHP・Python・Laravel などのアプリケーションから安心して MySQL を扱えるようになり、データ抽出やレポート作成、本番運用といった使い方もしやすいはずです。各項目は独立して読めるので、必要なところから拾い読みしてもかまいません。
入門と環境構築
MySQL を学ぶ最初のステップとして、ソフトウェアの位置づけを理解し、自分の環境に動くデータベースを用意する分野です。ここを通すことで、以降の SQL 学習を実機で試せるようになります。
MySQL とは
MySQL がどんなソフトウェアで、どんな場面で使われているかを押さえる入口です。RDBMS の基本概念や他のデータベースとの違いも軽く整理します。
- リレーショナルデータベース(RDBMS)とは
- MySQL の特徴と用途
- Web アプリのバックエンド
- データ分析・集計用途
- MySQL と MariaDB の関係
- 他の RDBMS(PostgreSQL, SQLite, SQL Server)との比較
- ライセンスとエディション(Community / Enterprise)
インストールと初期設定
自分の OS に MySQL を入れて、最初の接続までを行う分野です。開発環境のセットアップで詰まりやすいポイントもまとめます。
- Windows へのインストール(MySQL Installer)
- Linux へのインストール(apt / yum)
- Docker で MySQL を立ち上げる
- 初期パスワードの設定と root ユーザー
- 文字コード設定(utf8mb4)とタイムゾーン
- my.cnf / my.ini の基本
接続とクライアントツール
作成した MySQL サーバーに実際に接続し、操作するためのツールを学ぶ分野です。CUI と GUI の両方を扱えるようにします。
- mysql コマンドラインクライアントの基本
- ログインとログアウト
- プロンプトとオプション
- MySQL Workbench の使い方
- phpMyAdmin の使い方
- DBeaver や TablePlus などの GUI クライアント
- VS Code 拡張(SQLTools など)からの接続
SQL の基本
データベースを操作するための共通言語である SQL を、MySQL でひととおり書けるようになる分野です。データの取得・追加・更新・削除を一通りカバーします。
データベースとテーブルの操作
スキーマレベルの操作を扱います。データを入れる「箱」を作って整える、もっとも基本となる作業です。
- データベースの作成と削除(CREATE DATABASE / DROP DATABASE)
- データベースの一覧と切り替え(SHOW DATABASES / USE)
- テーブルの作成(CREATE TABLE)
- テーブルの確認(SHOW TABLES / DESCRIBE)
- テーブルの変更と削除(ALTER TABLE / DROP TABLE)
- テーブルのコピー(CREATE TABLE ... LIKE / AS SELECT)
データ型
カラムに格納するデータの型を選ぶための知識です。型の選び方は性能や正確性に直結します。
- 数値型(INT, BIGINT, DECIMAL, FLOAT, DOUBLE)
- 文字列型(CHAR, VARCHAR, TEXT)
- 日付・時刻型(DATE, DATETIME, TIMESTAMP, TIME)
- 真偽値の扱い(TINYINT(1) と BOOLEAN)
- 列挙型と集合型(ENUM, SET)
- JSON 型の基本
データの登録・更新・削除(DML)
テーブルに対してレコードを操作する基本構文を学ぶ分野です。CRUD のうち C・U・D を担当します。
- INSERT 文の基本
- 単一行 INSERT と複数行 INSERT
- INSERT ... SELECT
- UPDATE 文と WHERE の組み合わせ
- DELETE 文と WHERE の組み合わせ
- TRUNCATE TABLE と DELETE の違い
- REPLACE と INSERT ... ON DUPLICATE KEY UPDATE
データの取得(SELECT)
もっとも頻繁に使われる SELECT 文を扱います。条件指定や並び替え、ページングなど検索の基本を網羅します。
- SELECT の基本構文
- WHERE による条件指定
- 比較演算子と論理演算子
- LIKE と BETWEEN と IN
- NULL の扱いと IS NULL / IS NOT NULL
- ORDER BY と昇順・降順
- LIMIT と OFFSET によるページング
- DISTINCT による重複排除
- 別名(AS)とカラム表記
テーブル設計と関連
複数のテーブルを組み合わせて、現実の業務データを表現するための設計を学ぶ分野です。後の結合や正規化につながる土台になります。
キーと制約
データの一貫性を保つための仕組みを扱う分野です。設計段階で正しく入れておくことで、運用中の事故を防げます。
- 主キー(PRIMARY KEY)
- AUTO_INCREMENT
- 一意制約(UNIQUE)
- NOT NULL 制約
- デフォルト値(DEFAULT)
- CHECK 制約
- 外部キー(FOREIGN KEY)と参照整合性
- ON DELETE / ON UPDATE の挙動
正規化とテーブル設計
データの重複と矛盾を抑えるための設計手法を学びます。実務でテーブルを切るときの判断基準として使えるようにします。
- 正規化の考え方(第 1〜第 3 正規形)
- 1 対 1 / 1 対多 / 多対多 のモデリング
- 中間テーブルの使い方
- ER 図の読み方と書き方
- 命名規則(テーブル名・カラム名)
- 設計上のアンチパターン
インデックス
検索性能を支える仕組みであるインデックスを学ぶ分野です。どこに張るか、張らないかを判断できるようになることを目指します。
- インデックスの仕組み(B-Tree の基本)
- 単一カラムインデックスと複合インデックス
- UNIQUE インデックス
- 全文検索インデックス(FULLTEXT)の入り口
- インデックスが効くクエリと効かないクエリ
- インデックス過多のデメリット
結合・集計・サブクエリ
複数のテーブルを横断したり、データをまとめて分析したりするための SQL を扱う分野です。実用的なクエリのほとんどはここに含まれます。
結合(JOIN)
複数のテーブルを 1 つの結果として扱う方法を学びます。アプリやレポートで頻出するパターンを押さえます。
- 内部結合(INNER JOIN)
- 左外部結合・右外部結合(LEFT JOIN / RIGHT JOIN)
- クロス結合(CROSS JOIN)
- 自己結合(SELF JOIN)
- 複数テーブルの結合
- USING と ON の使い分け
集計とグループ化
データを集約して傾向を読み取るための構文です。レポート系の SQL の中心になります。
- 集計関数(COUNT, SUM, AVG, MIN, MAX)
- GROUP BY によるグループ化
- HAVING による集計後の絞り込み
- WHERE と HAVING の違い
- 複数カラムでのグループ化
- WITH ROLLUP の基本
サブクエリと CTE
クエリの中に別のクエリを書くテクニックを学びます。複雑な抽出を段階的に組み立てられるようになります。
- スカラーサブクエリ
- WHERE 句でのサブクエリ(IN / NOT IN / EXISTS)
- FROM 句のサブクエリ(派生テーブル)
- 相関サブクエリ
- WITH 句(共通テーブル式 / CTE)
- 再帰 CTE の入り口
よく使う関数
SQL の中で値を加工するための組み込み関数を扱う分野です。日付・文字列・数値の操作はとくに頻出です。
- 文字列関数(CONCAT, SUBSTRING, REPLACE, LENGTH, TRIM)
- 数値関数(ROUND, FLOOR, CEILING, ABS, MOD)
- 日付関数(NOW, CURDATE, DATE_FORMAT, DATE_ADD, DATEDIFF)
- 条件分岐(IF, CASE WHEN)
- NULL 関連(IFNULL, COALESCE, NULLIF)
- 型変換(CAST, CONVERT)
ビュー・トランザクション・ストアド
SQL をひととおり書けるようになった次の段階として、データの整合性を守る仕組みやサーバー側のロジックを学ぶ分野です。実務で品質と保守性を上げるために重要になります。
ビュー
よく使うクエリを名前付きで保存して再利用する仕組みを扱います。共通の集計や権限設計の補助として使えます。
- ビューの作成(CREATE VIEW)
- ビューの参照と更新
- 更新可能なビューの条件
- マテリアライズドビューの代替手段(集計テーブル)
トランザクション
複数の更新処理をひとまとまりとして扱う仕組みです。お金や在庫など、整合性が大事な処理で必須になります。
- トランザクションの基本(BEGIN, COMMIT, ROLLBACK)
- ACID 特性
- 分離レベル(READ COMMITTED, REPEATABLE READ など)
- ロックの種類(共有ロック・排他ロック)
- デッドロックと回避策
ストアドプログラム
サーバー側で動くロジックを書く仕組みを扱う分野です。重い処理をアプリ側から切り離したいときに役立ちます。
- ストアドプロシージャの基本
- ストアドファンクション
- トリガー(BEFORE / AFTER, INSERT / UPDATE / DELETE)
- イベントスケジューラ
- 使いどころと注意点
運用・性能・連携
学んだ知識を本番運用で使うための分野です。バックアップ・ユーザー管理・性能改善・アプリ連携など、現場で必要になる話題をまとめています。
ユーザーとセキュリティ
データベースに誰がどこまでアクセスできるかを管理する分野です。最低限のセキュリティ運用に必要な範囲を扱います。
- ユーザーの作成と削除(CREATE USER / DROP USER)
- 権限付与と剥奪(GRANT / REVOKE)
- 権限の種類(SELECT, INSERT, UPDATE, DELETE, ALL)
- ホスト指定とアクセス制御
- パスワードポリシーと SSL 接続の基本
- SQL インジェクションへの基本的な備え
バックアップとリストア
データを守るための運用作業を学ぶ分野です。事故やマシン入れ替えに備えて必須となります。
- mysqldump によるバックアップ
- mysqldump からのリストア
- 論理バックアップと物理バックアップの違い
- バックアップの自動化(cron 等)
- データのインポート・エクスポート(CSV, LOAD DATA INFILE)
パフォーマンスチューニング
遅いクエリを特定し、改善するための分野です。インデックス設計とあわせて学ぶと効果が大きくなります。
- スロークエリログの有効化と確認
- EXPLAIN による実行計画の読み方
- インデックスを活かすクエリの書き方
- N+1 問題とその回避
- ストレージエンジン(InnoDB と MyISAM)
- サーバー設定の基本パラメータ(innodb_buffer_pool_size など)
- レプリケーションの入り口(マスター・レプリカ)
アプリケーションからの利用
プログラミング言語から MySQL を使うための知識を扱う分野です。Web 開発で実際に動かすときの定番の流れを押さえます。
- PHP からの接続(PDO, mysqli)
- Python からの接続(PyMySQL, mysql-connector-python)
- Node.js からの接続(mysql2)
- ORM の利用(Laravel Eloquent, SQLAlchemy など)
- プリペアドステートメントとパラメータバインド
- マイグレーションツールの考え方
トラブルシューティングとログ
動かないとき・遅いときに原因を切り分けるための分野です。エラーメッセージとログの読み方を押さえます。
- 接続できない・認証に失敗するときの確認手順
- 文字化けが起きるときの確認(文字コードと照合順序)
- ロック待ち・デッドロックの確認
- エラーログ・一般クエリログ・スロークエリログの場所と使い分け
- 容量不足・テーブル肥大化への対処