MySQLのINSERT文の使い方徹底解説!基本から応用まで

データベースにデータを追加する際に必ず使うのが、INSERT文です。
MySQLを使った開発や運用では、ユーザー情報や商品データなど、さまざまなデータをデータベースに追加する場面が日常的にあります。
この記事では、MySQLのINSERT文について、基本的な文法から、複数行の追加方法、条件付き挿入、エラー対策など、実務で役立つテクニックまでを丁寧に解説します。
初心者の方でもわかりやすいように、実例を交えながら解説しますので、ぜひ参考にしてください。


INSERT文の基本構文

INSERT文の基本構文は以下の通りです。

INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);

例として、usersというテーブルに名前とメールアドレスを追加する場合は以下のようになります。

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

カラム名を省略して全カラムに値を指定することも可能ですが、カラムの順番を完全に一致させる必要があるため注意が必要です。

INSERT INTO users VALUES (1, '山田太郎', 'taro@example.com');

複数行を一度にINSERTする方法

データの挿入が複数行ある場合、1行ずつ実行するのは効率が悪くなります。
そのようなときは、以下のように複数のレコードを一括で挿入できます。

INSERT INTO users (name, email) VALUES 
('佐藤花子', 'hanako@example.com'),
('鈴木次郎', 'jiro@example.com'),
('田中三郎', 'saburo@example.com');

これにより、クエリの回数を減らすことができ、パフォーマンスも向上します。


NULLの扱い方と省略可能なカラム

テーブルによっては、特定のカラムがNULL(未入力可)を許容している場合があります。
その場合、省略したりNULLを明示的に指定することができます。

INSERT INTO users (name) VALUES ('高橋陽子');

もしくは

INSERT INTO users (name, email) VALUES ('高橋陽子', NULL);

省略したカラムには、デフォルト値やNULLが代入されます。
テーブル定義(CREATE TABLE)時に設定された制約を確認しておきましょう。


INSERT文とAUTO_INCREMENTの関係

よくあるケースとして、IDカラムに自動連番(AUTO_INCREMENT)が使われていることがあります。
この場合、IDカラムの値は明示的に指定しなくても問題ありません。

INSERT INTO users (name, email) VALUES ('井上悟', 'satoru@example.com');

IDは自動的に次の番号が付与されます。
ただし、明示的にIDを指定して挿入することも可能です(重複しないよう注意)。


INSERT IGNORE:重複時にエラーを無視

データ挿入時に重複エラーを回避したい場合、INSERT IGNOREを使うと便利です。

INSERT IGNORE INTO users (email) VALUES ('duplicate@example.com');

この構文を使うと、もしemailにユニーク制約があり、すでに存在するメールアドレスを挿入しようとした場合でも、エラーにならずに無視されます。


ON DUPLICATE KEY UPDATE:重複したら更新する

INSERT文には、重複時にデータを更新する構文もあります。
特定のユニークキー(例:メールアドレス)に重複が発生した場合、該当レコードを更新するという処理が可能です。

INSERT INTO users (email, name) VALUES ('taro@example.com', '山田太郎')
ON DUPLICATE KEY UPDATE name = VALUES(name);

この方法は、存在しなければ新規挿入、存在すれば更新という処理を1回のクエリで行えるため、非常に効率的です。


サブクエリを使ったINSERT

他のテーブルからデータを取得して挿入するには、サブクエリを使用します。

INSERT INTO archived_users (id, name, email)
SELECT id, name, email FROM users WHERE deleted = 1;

このようにすれば、条件に合致するデータを一括で別テーブルに移すことができます。


INSERT文でよくあるエラーと対処法

データ型の不一致

ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'id'

対処法:指定する値が、定義されたデータ型に合っているか確認しましょう。


NOT NULL制約違反

ERROR 1048 (23000): Column 'email' cannot be null

対処法:NOT NULL指定されたカラムに値がない場合、エラーになります。事前にスキーマを確認して、必須項目を入力しましょう。


ユニークキーの重複

ERROR 1062 (23000): Duplicate entry 'taro@example.com' for key 'email'

対処法:INSERT IGNOREON DUPLICATE KEY UPDATEを活用して重複対策を行うと安全です。


トランザクションとINSERT文

複数のINSERT文をまとめて処理したい場合は、トランザクションを活用することで整合性を保つことができます。

START TRANSACTION;

INSERT INTO orders (...) VALUES (...);
INSERT INTO order_items (...) VALUES (...);

COMMIT;

途中でエラーが出た場合はROLLBACK;で元に戻すこともできます。
これによりデータの一貫性が保証されます。


おわりに

INSERT文はMySQLで最も基本的かつ重要な文のひとつです。
本記事で紹介した基本構文から応用テクニックまでを理解しておくことで、実務や開発において柔軟かつ正確なデータ追加が可能になります。
特に、ON DUPLICATE KEY UPDATEINSERT IGNOREは、効率的でエラーに強い設計をするうえで欠かせない構文です。
ぜひこの記事を参考に、日々の業務や学習に活かしてみてください。

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