Day1 後半のゴール
「MySQLで“開発用の箱”を自分の手で用意できるようになる」
前半で、
「MySQLはサーバー」「データベースはその中の部屋」というイメージを作りました。
後半のゴールはここです。
自分用のデータベースを CREATE DATABASE で作れるUSE で「今どのデータベースを触っているか」を意識できる
SQLiteとの細かい違い(文字コード・AUTO_INCREMENT・ユーザー)を軽く押さえる
ここまでできれば、Day2 以降の「テーブル作成」「SQL実行」にスムーズに入れます。
まずはログインからおさらい
「mysql> が出たら“サーバーの玄関の中”にいる」
CLI での基本はこれでした。
mysql -u root -p
パスワードを入れて、mysql> が出たらログイン完了です。
ここは SQLite の sqlite3 mydb.sqlite3 と似ていますが、
「ファイル」ではなく「サーバー」に入っている点が違います。
今あるデータベースを確認してみます。
SHOW DATABASES;
SQLinformation_schema や mysql など、
システム用のデータベースが見えるはずです。
ここに「自分用の部屋」を増やしていきます。
自分用データベースを作る
「プロジェクト名っぽい名前を付けてみる」
例として、学習用に practice_db というデータベースを作ってみます。
CREATE DATABASE practice_db;
SQL実行したら、もう一度一覧を見ます。
SHOW DATABASES;
SQLpractice_db が増えていれば成功です。
ここで一つポイントがあります。
MySQL では、データベース名に「文字コード」や「照合順序(collation)」を指定できます。
例えば、UTF-8(日本語も扱いやすい)で作りたいなら、こうも書けます。
CREATE DATABASE practice_db
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
SQL最近は utf8mb4 を選んでおけばまず困りません。
SQLite は「文字コードをあまり意識しなくてよかった」ですが、
MySQL では「最初にちゃんと決めておく」文化があります。
USE で「今いる部屋」を決める
「USE practice_db; を打つと、そこが“作業場所”になる」
データベースを作っただけでは、まだ「どこで作業するか」が決まっていません。practice_db を使うと宣言します。
USE practice_db;
SQLこれで、「今からの操作は practice_db の中で行う」という状態になります。
確認してみましょう。
SELECT DATABASE();
SQLpractice_db と表示されればOKです。
この「今どのデータベースを使っているか」を意識するのが、
SQLiteとの大きな違いです。
SQLiteは「開いているファイル=今のデータベース」でしたが、
MySQLは「ログインしたあとに、どの部屋を使うか選ぶ」ステップがあります。
お試しでテーブルを1つ作ってみる
「SQLiteとほぼ同じだが、AUTO_INCREMENT がキーワード」
せっかくなので、practice_db の中に簡単なテーブルを作ってみます。
SQLiteでよくやった「メモ帳テーブル」を例にします。
CREATE TABLE notes (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
body TEXT,
created_at DATETIME NOT NULL
);
SQLここで、SQLiteとの違いがいくつか出てきます。
INT AUTO_INCREMENT PRIMARY KEY
SQLite では INTEGER PRIMARY KEY だけで自動採番されましたが、
MySQL では AUTO_INCREMENT を明示します。
「1,2,3,…と勝手に増えるIDにしてね」という指定です。
VARCHAR(100)
MySQL は文字列型に「最大長」を付けるのが一般的です。
SQLite の TEXT よりも「きっちり型を決める」文化があります。
DATETIME
SQLite では TEXT で日時を入れることが多かったですが、
MySQL では日時専用の型を使うことが多いです。
この時点で、
「MySQLは型や自動採番を少し厳しめに扱うんだな」
という感覚が持てれば十分です。
テーブルができたか確認する
「SHOW TABLES; と DESCRIBE で“目で見る”」
practice_db にテーブルができたか見てみます。
SHOW TABLES;
SQLnotes が表示されればOKです。
次に、カラム構造を確認します。
DESCRIBE notes;
SQLカラム名、型、NULL許可、キー情報、auto_increment などが一覧で出てきます。
GUIクライアントを使っている場合は、
テーブルをクリックすると同じ情報が見えるはずです。
SQLiteでは .schema コマンドで見ていた情報が、
MySQLでは DESCRIBE や GUI の「テーブル定義画面」に相当します。
1行だけ INSERT してみる
「AUTO_INCREMENT がちゃんと動くかを体で確認する」
notes に1件だけデータを入れてみます。
INSERT INTO notes (title, body, created_at)
VALUES ('MySQL Day1', '環境構築のテストメモ', NOW());
SQLここで id を指定していないのがポイントです。AUTO_INCREMENT が勝手に番号を振ってくれます。
確認してみます。
SELECT * FROM notes;
SQLid が 1 で入っていれば成功です。
SQLiteでは「INTEGER PRIMARY KEY に勝手に番号が入る」でしたが、
MySQLでは「AUTO_INCREMENT を付けたカラムに番号が入る」と覚えておくと整理しやすいです。
MySQLのユーザーと権限の“入口だけ”触れておく
「rootだけで全部やるのは“練習まで”にしておく」
Day1では深追いしませんが、
SQLiteとの大きな違いとして「ユーザーと権限」があります。
SQLite
ファイルにアクセスできる人は、みんな同じ権限
MySQL
ユーザーごとに「どのデータベースに何ができるか」を設定できる
本番に近い運用では、
アプリ用ユーザー(例:app_user)を作る
そのユーザーには practice_db だけに権限を与えるroot は管理用にだけ使う
という形にしていきます。
Day1の時点では、
「今は root で練習しているけど、
本番ではアプリ専用ユーザーを作るのが普通なんだな」
と頭の片隅に置いておけば十分です。
GUI クライアントでも同じことをやってみる
「CLIでやったことを、GUIで“なぞる”と理解が定着する」
もし MySQL Workbench などのGUIを入れているなら、
同じことをGUIでもやってみると理解が一気に深まります。
接続
→ root でログイン(前半でやった設定)
データベース作成
→ 「Schemas」や「Database」メニューから practice_db を作成
(内部的には CREATE DATABASE が実行されている)
データベース選択
→ practice_db を選択して「Default Schema」に設定
(内部的には USE practice_db)
テーブル作成
→ GUIの「Create Table」から notes を作る
(内部的には CREATE TABLE が実行されている)
データ確認
→ notes を右クリックして「Select Rows」
(内部的には SELECT * FROM notes)
CLIでやったことをGUIでなぞると、
「SQLで書いていること」と「ツールの操作」が頭の中で結びつきます。
セキュリティの観点から見た「開発用DBの作り方」
「“練習だから適当でいい”が、後でそのまま本番に行きがち」
環境構築の段階で、
次の2つだけは意識しておくと、後々かなり効いてきます。
開発用と本番用を分ける前提で考える
開発用はローカルPCの MySQL
本番用はサーバー上の MySQL
同じ practice_db でも、中身も権限も別物にする
root を常用しない癖をつける
練習が終わったら、アプリ用ユーザーを作る
本番では root で直接アプリから接続しない
SQLiteは「ローカルの1ファイル」なので、
そのまま本番に持っていくことも多かったと思います。
MySQLは「サーバー+ユーザー+権限」という世界なので、
Day1のうちから「開発用と本番用は別」「rootは管理用」と意識しておくと、
安全な設計に自然と寄っていきます。
Day1 後半のまとめ
CREATE DATABASE practice_db; で自分用のデータベース(部屋)を作り、USE practice_db; で「今この部屋を使う」と宣言してからテーブルやデータを扱う、という流れが MySQL の基本になる。
データベース作成時に DEFAULT CHARACTER SET utf8mb4 などを指定しておくと、日本語を含む文字列も扱いやすくなり、SQLiteよりも「文字コードを最初に決める」意識が重要になる。CREATE TABLE notes (...) のようにテーブルを作るとき、INT AUTO_INCREMENT PRIMARY KEY や VARCHAR(100)、DATETIME など、MySQLらしい型と自動採番の指定が出てくるが、やっていること自体はSQLiteとほぼ同じで、「少し厳密になった」と捉えればよい。SHOW TABLES; や DESCRIBE notes;、SELECT * FROM notes; を通して、「データベースを選ぶ → テーブルを作る → データを入れる → 確認する」という一連の流れを、自分の手で一度通しておくと、Day2以降の学習が一気に楽になる。
MySQLは「サーバー+ユーザー+権限」の世界なので、開発用と本番用を分ける前提や、「rootはあくまで管理用で、アプリ用ユーザーを別に作る」という意識をDay1のうちから持っておくと、セキュリティ的に健全なスタートが切れる。
ここまでできていれば、
「MySQLに入れない」「どこにテーブルを作っているか分からない」という初期のつまずきはほぼ解消できています。
次のDay2からは、SQLiteとの違いを意識しながら、テーブル定義や型の世界に踏み込んでいきましょう。

