MySQL | SQLite経験者向け、30日で習得するMySQL:差分理解 - Day1 環境構築

SQL MySQL
スポンサーリンク

Day1 後半のゴール

「MySQLで“開発用の箱”を自分の手で用意できるようになる」

前半で、
「MySQLはサーバー」「データベースはその中の部屋」というイメージを作りました。

後半のゴールはここです。

自分用のデータベースを CREATE DATABASE で作れる
USE で「今どのデータベースを触っているか」を意識できる
SQLiteとの細かい違い(文字コード・AUTO_INCREMENT・ユーザー)を軽く押さえる

ここまでできれば、Day2 以降の「テーブル作成」「SQL実行」にスムーズに入れます。


まずはログインからおさらい

「mysql> が出たら“サーバーの玄関の中”にいる」

CLI での基本はこれでした。

mysql -u root -p

パスワードを入れて、mysql> が出たらログイン完了です。
ここは SQLite の sqlite3 mydb.sqlite3 と似ていますが、
「ファイル」ではなく「サーバー」に入っている点が違います。

今あるデータベースを確認してみます。

SHOW DATABASES;
SQL

information_schemamysql など、
システム用のデータベースが見えるはずです。
ここに「自分用の部屋」を増やしていきます。


自分用データベースを作る

「プロジェクト名っぽい名前を付けてみる」

例として、学習用に practice_db というデータベースを作ってみます。

CREATE DATABASE practice_db;
SQL

実行したら、もう一度一覧を見ます。

SHOW DATABASES;
SQL

practice_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();
SQL

practice_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;
SQL

notes が表示されれば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;
SQL

id1 で入っていれば成功です。

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 KEYVARCHAR(100)DATETIME など、MySQLらしい型と自動採番の指定が出てくるが、やっていること自体はSQLiteとほぼ同じで、「少し厳密になった」と捉えればよい。
SHOW TABLES;DESCRIBE notes;SELECT * FROM notes; を通して、「データベースを選ぶ → テーブルを作る → データを入れる → 確認する」という一連の流れを、自分の手で一度通しておくと、Day2以降の学習が一気に楽になる。
MySQLは「サーバー+ユーザー+権限」の世界なので、開発用と本番用を分ける前提や、「rootはあくまで管理用で、アプリ用ユーザーを別に作る」という意識をDay1のうちから持っておくと、セキュリティ的に健全なスタートが切れる。

ここまでできていれば、
「MySQLに入れない」「どこにテーブルを作っているか分からない」という初期のつまずきはほぼ解消できています。
次のDay2からは、SQLiteとの違いを意識しながら、テーブル定義や型の世界に踏み込んでいきましょう。

タイトルとURLをコピーしました