MySQL | SQLite経験者向け、30日で習得するMySQL:差分理解 - Day3 基本操作の確認

SQL MySQL
スポンサーリンク

Day3 前半のゴール

「SQLiteで知っている基本操作を、“MySQLの文法とクセ”で再確認する」

今日はあえて「復習レベル」でいきます。
テーマはこの3つです。

CREATE TABLE
INSERT / SELECT
UPDATE / DELETE

SQLite経験者なので、文法そのものはほぼ知っています。
Day3 前半の狙いは、

SQLiteとほぼ同じところ
MySQLで“ちょっとだけ違う”ところ(型・AUTO_INCREMENT・エンジン)

を意識しながら、基本操作を一度きれいに通すことです。


CREATE TABLE のおさらい

「“型・AUTO_INCREMENT・ENGINE”をセットで書く癖をつける」

まずはテーブル作成から。
Day2でやった内容を、もう少し「基本操作」の目線で整理します。

SQLite だと、こんな感じでした。

CREATE TABLE users (
  id    INTEGER PRIMARY KEY,
  name  TEXT,
  email TEXT
);
SQL

MySQL では、こうなります。

CREATE TABLE users (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  name       VARCHAR(50)  NOT NULL,
  email      VARCHAR(255) NOT NULL,
  created_at DATETIME     NOT NULL
) ENGINE=InnoDB;
SQL

ここで意識してほしいのは、3つの“お約束”です。

INT AUTO_INCREMENT PRIMARY KEY

SQLiteの INTEGER PRIMARY KEY に相当します。
MySQLでは、自動採番を明示する必要があります。

「IDは自動で増える整数」
INT AUTO_INCREMENT PRIMARY KEY

と、ほぼテンプレで覚えてしまってOKです。

VARCHAR / DATETIME などの型

Day2でやったとおり、MySQLは型をきっちり決めます。

名前 → VARCHAR(50)
メール → VARCHAR(255)
作成日時 → DATETIME

「とりあえず TEXT」ではなく、
「この項目は何文字くらいか」「これは日時か」を考えて選びます。

ENGINE=InnoDB

最後の ENGINE=InnoDB は、
「このテーブルは InnoDB で管理してね」という指定です。

トランザクション・外部キー・安全性を考えると、
基本は InnoDB 一択でOKです。


INSERT のおさらい

「AUTO_INCREMENT に任せて、“意味のある値”だけ入れる」

次に、データの追加です。
SQLiteとほぼ同じですが、AUTO_INCREMENT を意識します。

INSERT INTO users (name, email, created_at)
VALUES ('山田太郎', 'taro@example.com', NOW());
SQL

ここで重要なのは、

id を書いていない
→ MySQL が勝手に 1,2,3,… を振ってくれる

という点です。

SQLiteのときも「id を省略すれば自動採番」でしたが、
MySQLでも同じ感覚で使えます。

複数行を一気に入れることもできます。

INSERT INTO users (name, email, created_at)
VALUES
  ('山田太郎', 'taro@example.com',  NOW()),
  ('佐藤花子', 'hanako@example.com', NOW());
SQL

ここまで来ると、
SQLiteとほとんど同じ書き心地だと感じるはずです。


SELECT のおさらい

「“どのテーブルから、どのカラムを、どんな条件で”を意識する」

SELECT も基本は同じです。

SELECT id, name, email
FROM users;
SQL

条件付きも同じです。

SELECT id, name, email
FROM users
WHERE email = 'taro@example.com';
SQL

ここで、MySQLならではの“よく使うお約束”を1つだけ足すとしたら、
LIMIT です。

SELECT id, name, email
FROM users
ORDER BY id DESC
LIMIT 10;
SQL

「新しい順に10件だけ欲しい」という、
ログ画面・一覧画面でよくあるパターンです。

SQLiteでも LIMIT はありましたが、
MySQLでも同じように使える、と再確認しておいてください。


UPDATE のおさらい

「“必ずWHEREを書く”を体に叩き込む」

UPDATE も文法はほぼ同じです。

UPDATE users
SET name = '山田太郎(改名)'
WHERE id = 1;
SQL

ここで一番大事なのは、
文法ではなく「心構え」です。

WHERE を書き忘れると、
全行が書き換わります。

UPDATE users
SET name = '山田太郎(改名)';
-- 全ユーザーのnameが同じになる
SQL

SQLiteでも同じ危険はありましたが、
MySQLは「本番で使われることが多い」ので、
被害が一気に大きくなります。

実務では、UPDATEを書くときに、

本当にこの条件で1件だけか?
先に SELECT * FROM users WHERE ...; で確認したか?

と、自分に問いかける癖をつけます。

これはセキュリティというより「事故防止」ですが、
結果的にデータの安全性を守ることにつながります。


DELETE のおさらい

「“戻せない操作”だと意識する」

DELETE も同じです。

DELETE FROM users
WHERE id = 1;
SQL

これも、WHERE を書き忘れると地獄です。

DELETE FROM users;
-- 全削除
SQL

SQLiteでも同じでしたが、
MySQLは「サーバー上の本番データ」を消す可能性があるので、
より慎重さが求められます。

実務では、

本当に削除すべきか?
論理削除(フラグを立てるだけ)でよくないか?

という判断も入ってきますが、
Day3の段階では、

DELETE は「戻せない操作」
UPDATE / DELETE は必ず WHERE を付ける

この2つを強く意識しておけば十分です。


SQLite と MySQL の基本操作の“差分”を整理する

「文法はほぼ同じ、でも“設計と慎重さ”が一段階上がる」

ここまで見てきて分かるとおり、

CREATE TABLE
INSERT
SELECT
UPDATE
DELETE

の文法は、SQLiteとほとんど同じです。
差分は主にここです。

CREATE TABLE
→ 型(VARCHAR / DATETIME / INT)をちゃんと決める
AUTO_INCREMENTENGINE=InnoDB を書く

INSERT
→ AUTO_INCREMENT に任せて、id を自分で入れない

UPDATE / DELETE
→ 本番運用を前提に、「WHERE を絶対に付ける」意識を強く持つ

つまり、

「SQLの書き方」よりも、「設計と慎重さ」が一段階上がる

これが、SQLiteからMySQLに来たときの本当の差分です。


Day3 前半のまとめ

CREATE TABLE は、SQLiteと文法は似ているが、MySQLでは INT AUTO_INCREMENT PRIMARY KEYVARCHARDATETIMEENGINE=InnoDB をセットで書くのが“基本形”になる。
INSERT は、AUTO_INCREMENT に任せて id を指定せずに入れるのが基本で、複数行INSERTもSQLiteと同じ感覚で使える。
SELECT は、FROM・WHERE・ORDER BY・LIMIT の組み合わせで、SQLiteとほぼ同じ書き心地だが、「新しい順に何件だけ」といった現場でよくあるパターンを意識しておくと実戦に強くなる。
UPDATE / DELETE は文法こそ同じだが、「WHEREを書き忘れると全件更新・全件削除になる」というリスクが、サーバーDBであるMySQLではより致命的になり、実務では“必ず先にSELECTで対象を確認する”という慎重さが求められる。

後半では、
実際に1つの小さなテーブルを作り、INSERT → SELECT → UPDATE → DELETE を一連で回しながら、
「MySQLならではの挙動(AUTO_INCREMENTの動き、DATETIMEの扱い)」を手で確かめていきます。

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