MySQL

MySQLとは?データベース初心者向けに仕組みを解説

ハードディスクの内部構造のクローズアップのイメージ
要点: MySQLとは、Webでよく使われるデータベースです。DB・テーブル・SQLの関係、MariaDBとの違い、PHP・WordPressとのつながりを初心者向けに解説します。

結論:MySQLとは表形式で保存し検索できるデータベースです

MySQLとは、表形式でデータを保存し、PHPなどから検索・追加・更新できるリレーショナルデータベースです。ブログ記事・会員・商品・予約などの裏側を担い、WordPressの保存先としても使われます。

HTMLが文書そのもの、PHPとはが文書を作る厨房だとすれば、MySQLは「食材倉庫と検索係」です。厨房のPHPが倉庫から材料(記事・会員データ)を取り出して料理(HTML)を作るイメージです。この記事では全体像、用語、基本SQL、MariaDBとの関係、文字コード、PHP・WordPressとのつながりまで整理します。私たちはMySQL公式ドキュメントとMariaDB公式ドキュメント、PHP公式マニュアル(php.net)を参考にまとめました。

全体像:ブラウザ・PHP・MySQLの分担

Web表示の裏側は3者の分担で動きます。ブラウザが表示、PHPが処理と生成、MySQLが保存と検索です。

  1. ブラウザが一覧ページ(例:list.php)を要求する
  2. PHPがMySQLへSQL(例:SELECT ... LIMIT 20)を送る
  3. MySQLが該当行を返却する
  4. PHPが結果をループでHTML化する
  5. ブラウザが完成HTMLを表示する

たとえば掲示板の投稿は、PHPが受け取った本文を INSERT で保存し、一覧表示では SELECT で取り出します。会員ログインでは SELECT で照合し、予約変更では UPDATE、退会や削除では DELETE を使います。通信の往復自体はHTTPの基礎解説、置き場所の考え方はWebサーバー解説で補えます。

  • ブラウザ:表示と入力送信(記事一覧の表示、投稿フォームの送信)
  • PHP:条件分岐とSQL実行、HTML生成(list.phpbbs-post.phplogin.php
  • MySQL:保存・検索・更新・削除(blog_db 内の posts テーブル)

DB・テーブル・行・SQLの関係:倉庫と表と指示言語

電子回路基板のイメージ
SQLはデータベースへの指示言語

初心者が混同しやすい4用語を整理します。データベースは倉庫全体、テーブルは表1枚、行は1件、列は項目、SQLは指示言語です。

用語役割具体例
データベース倉庫全体blog_dbshop_db
テーブル表1枚posts(記事表)、users(会員表)
行(レコード)データ1件1行=記事1件
列(カラム)項目idtitlecreated_at
SQL指示言語SELECT で取り出し

具体的な中身を想像します。posts テーブルに列 idtitlebodycreated_at がある場合、1行が記事1件です。users テーブルなら idnameemailpassword_hash のように会員1人が1行です。テーブルを分ける理由は、記事と会員を同じ表に混ぜると検索・更新が複雑になり、誤更新の原因になるためです。用途別に表を分け、必要に応じてIDで関連付けます。

命名の約束は3つです。DB名・テーブル名・列名は半角英数字とアンダースコアに統一し、日本語や空白を避けます。接頭辞が付く環境では作成後の正式名をコピーして使います。予約語(ordergroup など)を列名に使うとSQLエラーの元になるため避けます。作成手順自体はDB作成手順で扱います。

基本SQL:SELECT・INSERT・UPDATE・DELETEの4命令

覚えるSQLは最初は4つで十分です。取り出し・追加・更新・削除です。次の見本は posts テーブル(idtitle)を前提にしています。

-- 取り出し:新しい順に10件
SELECT id, title FROM posts ORDER BY id DESC LIMIT 10;

-- 追加:1件登録
INSERT INTO posts (title) VALUES ('初投稿');

-- 更新:id=1の題名を修正
UPDATE posts SET title = '修正後の題名' WHERE id = 1;

-- 削除:id=1を削除
DELETE FROM posts WHERE id = 1;

UPDATEDELETE では WHERE を付け忘れると全件対象になるため、実行前に SELECT ... WHERE で対象件数を確認する習慣が重要です。管理画面のSQL実行欄で試す場合も、本番DBではなく確認用DBで試し、件数表示を見てから実行します。

テーブル定義の最小例も示します。文字セットは utf8mb4、エンジンは InnoDB が基準です。

CREATE TABLE IF NOT EXISTS posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(200) NOT NULL,
  body TEXT,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

VARCHAR(200) は題名のような短文、TEXT は本文のような長文、DATETIME は投稿日時、AUTO_INCREMENT は自動採番のIDです。PHPからの実行は値を直接埋め込まず、PDOのプレースホルダで渡します(PHPとMySQL接続)。文字列結合でSQLを組み立てるとSQLインジェクションの原因になります。

MySQLとMariaDB・他方式との違い:比較表で整理する

MariaDBはMySQL派生の互換性の高いデータベースです。入門段階の基本操作は共通点が多く、区別より基本の習得が優先です。差分は公式ドキュメントで確認するのが確実です。

観点MySQLMariaDB
位置づけ広く使われるRDBMySQL派生の互換性の高いRDB
基本SQLSELECT・INSERT等の書き方は共通同左(基本は共通)
入門学習テーブル設計と基本SQLから始める同左
確認先MySQL公式ドキュメントMariaDB公式ドキュメント

FreeHostBoxではMySQL 8 / MariaDB 11.4をご用意しています。どちらが提供されるかや個数・上限はプランと管理画面の表示で確認してください。ぜひ無料プランでお試しください。管理画面の表示に従って進めてください。

保存方式全体の中での位置づけも整理します。

方式向く用途注意点
MySQL/MariaDB記事・会員・商品・予約の管理DB・ユーザー作成と権限設定が必要
SQLite等のファイル型DB小規模・個人用の試作同時更新や権限管理ではRDB運用が有利
表計算・CSV直書き少量データの手管理検索・同時更新・自動処理はデータベースが得意

紹介ページだけならHTML公開の範囲で足りますが、一覧・検索・会員管理が必要になった段階でMySQLの出番です。完成形の例としてWordPressはPHP+MySQL構成で、記事投稿がDB保存、表示がPHPの取り出しとHTML化です。

文字コードとデータ型の基礎:文字化け防止の統一ルール

文字化けの原因は4か所の不一致です。テーブル文字セット、接続文字コード、PHP保存形式、HTMLの meta charset です。4点をUTF-8系に統一します。

箇所設定値確認方法
テーブル文字セットutf8mb4SHOW CREATE TABLE posts; で確認する
接続文字コードcharset=utf8mb4PDO接続文字列で指定する
PHP保存形式UTF-8(BOMなし)エディタの表示で確認する
HTML表示<meta charset=UTF-8>ソース表示で確認する

データ型の選び方は次の通りです。題名は VARCHAR(200)、本文は TEXT、IDは INT AUTO_INCREMENT PRIMARY KEY、日時は DATETIME DEFAULT CURRENT_TIMESTAMP が出発点です。メールアドレスは VARCHAR(255)、公開可否は TINYINT(1) のように用途で分けます。桁数や型の厳密な仕様はMySQL公式ドキュメントを参照します。

照合順序(collation)は utf8mb4_0900_ai_ci 等の utf8mb4 系を選びます。絵文字を含む題名や multibyte 文字の検索で差が出ます。既存テーブルの文字セット変更はデータ退避が必要な場合があるため、新規作成時に DEFAULT CHARSET=utf8mb4 を付けるのが確実です。PHP側の接続例はPHPとMySQL接続でご紹介しています。

PHP・WordPressとの関係と安全な使い方の入口

デスクでブログを書くイメージ
WordPressの裏側はPHPとデータベース

PHPとMySQLの連携は、ホスト名・DB名・ユーザー・パスワードの4情報をPDOに渡し、SQLを実行して結果を htmlspecialchars で表示する流れです。値渡しはプレースホルダが基準です。

$stmt = $pdo->prepare('SELECT id, title FROM posts WHERE title LIKE :q ORDER BY id DESC LIMIT 20');
$stmt->execute([':q' => '%' . $search . '%']);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

WordPressも同じ構成で動きます。記事投稿でDBへ INSERT、表示で SELECT、編集で UPDATE です。仕組みが分かると、表示崩れがテーマ(PHP)の問題か、保存内容(DB)の問題かの切り分けができます。自作の list.php で一覧表示を体験してからWordPressを見ると理解が早くなります。

警告:DBパスワードや管理者情報をソースコードへ直書きしたまま、公開リポジトリへpushしたり共有したりしないでください。接続例の仮値は実際の値に置き換えた上で、ファイルの公開範囲と権限、保管場所を確認します。エラー詳細を本番画面に出しっぱなしにしない点も重要です。

よくある誤解は3つです。「身内掲示板だから対策不要」は誤りで、自動巡回は限定公開でも届きます。「Excelで十分」は少量管理では正しいですが、検索・同時更新・自動処理ではDBが有利です。「DBを作れば自動で表示される」も誤りで、表示はPHP側の取り出しとHTML化が必要です。特に削除系のSQLは実行前の対象確認が不可欠で、条件なし実行による全件消失を防ぐ習慣が求められます。

公開前のチェックリストは次の通りです。

  • DB・テーブル・列の用語と役割を説明できる
  • SELECT・INSERT・UPDATE・DELETEの4命令を posts で試した
  • テーブルと接続が utf8mb4 に統一されている
  • UPDATEDELETE 実行前に SELECT ... WHERE で対象件数を確認した
  • PHP連携ではPDO+プレースホルダ、表示では htmlspecialchars を使う方針にした
  • 秘密情報を公開場所や共有リポジトリに置いていない
  • 公式ドキュメントと管理画面の案内表示で最新仕様を確認した

ミニ実践として、今日は posts テーブル作成と4命令の実行までを目標にします。できたら SELECT ... ORDER BY id DESC LIMIT 10 で一覧を取り出し、次記事の作成手順と接続記事へ進みます。サイト全体の工程はサイト公開の全体工程記事も参考になります。作業メモにはDB名・テーブル名・実行したSQL・返却件数を残します。件数が想定と違う場合はSQLを変える前に、対象DBの選択と WHERE 条件の綴りを見直します。更新・削除の前後で対象行の表示を比べると、意図通りの変更かが確かめられます。

補足:命名規則と確認用SQLの使い方

テーブル名と列名は半角英小文字とアンダースコアに統一します。PostTitles のような大文字混じりや日本語名は、環境差や引用符の要否で混乱の元になります。複数語は blog_postscreated_at のように単語間をアンダースコアでつなぎます。列名に ordergroup などの予約語を使うと、毎回引用符が必要になり保守性が下がるため避けます。新規作成時は SHOW TABLES; で一覧確認し、SHOW CREATE TABLE posts; で文字セットとエンジンを確認する習慣を付けます。

確認用SQLは対象件数を絞って実行します。SELECT * FROM posts; の全件取得ではなく、SELECT id, title FROM posts ORDER BY id DESC LIMIT 10; のように列と件数を限定します。更新前は SELECT id, title FROM posts WHERE id = 1; で対象1件を確認し、更新後に同じ条件で再確認します。削除前も同様に対象行だけを表示してから実行します。件数把握には SELECT COUNT(*) FROM posts; を使います。管理画面のSQL実行欄では対象DBの選択間違いが起きやすいため、実行前に画面上部のDB名表示を見直します。取得結果を画面に出す際はPHP側で出力の無害化を行い、件数表示の前後比較で変更の有無を確かめます。

次に読む記事

出典・参考資料

  • MySQL公式ドキュメント:SQL構文、データ型、文字セット(utf8mb4)の仕様
  • MariaDB公式ドキュメント:互換性と差分の考え方
  • PHP公式マニュアル(php.net):PDOと出力エスケープの仕様
  • 無料プランの内容は料金ページをご覧ください。分からなければ私たちがサポートします。まずは無料プランで実際に触って確かめてみてください。

よくある質問

データベースはなぜ必要?

記事・会員・商品など保存と検索が必要なデータを扱うためです。紹介ページだけならHTMLのみで足りますが、一覧・検索・会員管理が要る段階でDBが必要です。

MySQLとMariaDBの違いは?

MariaDBはMySQL派生の互換性の高いDBです。基本操作やSQLは共通点が多く、入門段階では区別よりテーブル設計と基本SQLの習得が重要です。公式ドキュメントで差分を確認します。

SQLとは?

DBへ指示する言語です。SELECT(取り出し)・INSERT(追加)・UPDATE(更新)・DELETE(削除)の4つから覚えます。具体例は本文のSQL見本で解説します。

Excelと何が違うの?

表で扱う点は似ていますが、DBは大量件数の検索・同時更新・権限管理・PHPからの自動処理に強い点が違います。掲示板や会員管理のようなWeb処理にはDBが向きます。

無料サーバーでもMySQLは使える?

FreeHostBoxではMySQL 8/MariaDB 11.4をご用意しています。個数や上限はプランで変わるため、管理画面の表示と料金ページで確認してください。ぜひ無料プランでお試しください。

文字化けを防ぐには?

テーブル文字セットと接続文字コードをutf8mb4に統一し、PHP側の保存形式とHTMLのmeta指定もUTF-8に揃えます。絵文字や multibyte 文字を扱う場合は特に重要です。

更新履歴: 公開 2026-09-03 / 最終更新 2026-09-09。技術仕様・対応バージョンは変更されるため、重要な設定は公式ドキュメントも併せて確認してください。

DBを作ってPHPとつなげる

DB作成からPHP接続まで通して試すと一気に理解が進みます。

PHP×MySQLを読む 他の記事を探す