こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回の第1回では、無事にMySQLを使える環境を整えました。今日からは、その広大なデータベースの中に、実際にデータを格納するための「表(テーブル)」を作っていきます。
初心者の方は「とりあえず項目を並べればいいんでしょ?」と考えがちですが、実はここが一番の踏ん張りどころ。家を建てる前の「設計図」を作る工程と同じです。柱の位置(データ型)や、どの部屋に何を置くか(テーブル分割)を間違えると、後からリフォーム(データ移行)するのは至難の業です。
先生、テーブルを作る時、データの種類(型)がいっぱいあってどれを選べばいいか迷います。「全部VARCHAR(文字列)にしておけば困らないんじゃない?」って思っちゃうんですが、それじゃダメなんですか?
コウ君、それは典型的な「初心者の罠」ね!
全部文字列にすると、例えば「日付順に並び替える」ことができなくなったり、数値の計算が合わなくなったりするの。それに、メモリやディスクの無駄遣いにもなるわ。
今回は、MySQLが持っている「データ型」の特性を理解して、プロがどうやってテーブルを組み立てているのか、その思考プロセスを教えるわね!
📚 MySQL初心者講座・連載ロードマップ(全8回)
- 【第1回】データベースの概念と最速インストール・初期設定
- 【第2回】テーブル設計の極意:データ型と主キーの重要性(本記事)
- 【第3回】SQL基本4操作(CRUD):SELECT/INSERT/UPDATE/DELETEをマスターする
- 【第4回】データの抽出と並び替え:WHERE句とORDER BYを使いこなす
- 【第5回】複数のテーブルを繋ぐ:JOIN(結合)の魔法を理解する
- 【第6回】集計とグループ化:COUNT/SUMとGROUP BYで統計を取る
- 【第7回】インデックスとパフォーマンス:重いクエリを劇的に速くする方法
- 【第8回】バックアップと復旧:mysqldumpによるデータ保護と自動化
目次
1. テーブル設計の第一歩:カラムとレコードの役割
MySQLのテーブルは、よくExcelのシートに例えられます。しかし、データベース特有の「決まり」があります。
1-1. カラム(列)は「データの属性」
縦の列を「カラム」と呼びます。ここには「名前」「年齢」「メールアドレス」といった情報の項目を定義します。重要なのは、「1つのカラムには1種類のデータ型しか入れられない」ということです。
1-2. レコード(行)は「データの個体」
横の行を「レコード」または「ロウ」と呼びます。これが1人分のユーザーデータ、あるいは1件の記事データになります。データベースへの命令(SQL)は、このレコード単位で読み書きするのが基本です。
2. これだけは覚えたい!主要な「データ型」一覧
MySQLには多くのデータ型がありますが、初心者が実戦で使うのは以下の4つのカテゴリーに集約されます。
2-1. 数値型 (Numeric Types)
- INT: 整数。IDや個数、年齢などに使います。
- DECIMAL: 小数点を含む数値。消費税や金額計算など、正確な計算が必要な場所に使います。
2-2. 文字列型 (String Types)
- VARCHAR(n): 可変長の文字列。名前や住所など。
nには最大文字数を指定します(例: VARCHAR(255))。 - TEXT: 長文用。ブログの本文など、文字数が予測できない場合に使います。
2-3. 日付・時刻型 (Date and Time Types)
- DATETIME: 日付と時刻(2026-05-09 10:00:00)。作成日時などに最適。
- DATE: 日付のみ(2026-05-09)。誕生日など。
2-4. その他
- BOOLEAN / TINYINT(1): 0か1か(真か偽か)。「退会フラグ」などに使います。
3. 主キー(Primary Key)がなければデータベースにあらず
テーブルを作る際、絶対に欠かしてはいけないのが「主キー(Primary Key)」です。これは、そのテーブルの中でレコードを唯一無二に特定するための番号です。
3-1. 主キーの3条件
- 重複しない(Unique): 同じIDの人が2人いてはいけません。
- 空であってはならない(Not Null): IDがない人は存在できません。
- 不変であること: 原則として、一度決めたら変えない値を使います。
多くの場合、AUTO_INCREMENT(自動連番)という機能を使って、データが入るたびに「1, 2, 3…」と勝手に番号が振られるように設定します。
4. データの重複を防ぐ「正規化」の超基本
例えば「注文テーブル」を作る時、1つのテーブルに「客の名前」「客の住所」「商品名」「単価」を全部詰め込むのはNGです。客が何度も注文すると、同じ名前と住所が何度も記録され、住所が変わった時にすべての行を直さなければならなくなります。
これを防ぐために、「ユーザーテーブル」と「注文テーブル」に分け、IDで紐付けることを「正規化」と呼びます。初心者のうちは「1つのテーブルに情報を詰め込みすぎない」ことを意識しましょう。
[試して理解]Linuxのしくみ -実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】 [ 武内 覚 ] 価格:3520円 |
[Image illustrating database normalization showing a flat table split into Two Related Tables with a Common ID]
5. 実践:ユーザー管理テーブルを作ってみよう
前回作成した linux_koubou_db を使って、実際にテーブルを作成するSQLを打ってみましょう。
# データベースを選択
USE linux_koubou_db;
# テーブル作成
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
解説:
NOT NULL: 空っぽでの登録を禁止します。UNIQUE: 同じメールアドレスの重複登録をエラーにします。DEFAULT CURRENT_TIMESTAMP: 登録した瞬間の時刻を勝手に記録してくれます。
6. AIにテーブル設計をレビューさせる魔法のプロンプト
自分で考えた設計が正しいか不安な時は、AIにレビューさせましょう。これが上達への最短ルートです。
6-1. 設計レビュー用プロンプト
「MySQLで『ブログのコメント機能』のテーブルを作ろうとしています。
以下のSQLを作成しましたが、プロの視点で修正点や不足しているカラム、適切なデータ型のアドバイスをください。
CREATE TABLE comments (
id INT,
user_name TEXT,
comment_text TEXT,
date TEXT
);
特に、主キーの設定や日付型の選び方について教えてください。」
AIは「IDにAUTO_INCREMENTをつけましょう」「日付はTEXTではなくDATETIMEにすべきです」「返信機能を想定してparent_idを追加してはどうですか?」といった、自分では気づけなかった視点を与えてくれます。
まとめ:適切な設計がシステムの寿命を延ばす
第2回の講座、お疲れ様でした!
今日は、単にコマンドを覚えるのではなく、「データ型を使い分ける意味」や「主キーの重要性」といった、データベースの根幹となる思想を学びました。地味な作業に見えますが、ここがしっかりしていれば、後のSQL操作が驚くほど楽になります。
次回、第3回「SQL基本4操作(CRUD):SELECT/INSERT/UPDATE/DELETEをマスターする」では、今日作ったテーブルに実際にデータを入れ、取り出し、書き換えるという、DB操作の核心部分に迫ります。ついにデータが動き始めますよ。お楽しみに!
▼ 設計したDBを動かしてみよう ▼
AlmaLinux 9+MySQL 8.0が
サクサク動く「高性能VPS」
データベース設計スキルを活かして
「エンジニアとしての格を上げる」

コメント