表に新しいレコードを追加するSQLの命令。
INSERT 文とは、表に新しいレコードを追加する SQL の命令のことです。レコード(=1行分のデータのまとまり)を1件、表に増やします。
身近な例で考えると、図書館に新しい本を1冊登録する作業に似ています。「書名・著者・分類」をカードに書いて蔵書台帳に1行追加するように、INSERT 文は決められた列に値を入れて新しい行を作ります。
上のツールで▶ボタンを押すと、追加する列と値を対応づけ、その値が新しい1行となって表の末尾に増える流れを確認できます。
INSERT 文の基本の形は、表と列を指定する部分と、値を並べる部分でできています。
INSERT INTO 表 (列) VALUES (値)
それぞれの役割は次のとおりです。
・INSERT INTO 表 (列):どの表の、どの列に値を入れるかを指定する
・VALUES (値):実際に入れる値を、列と同じ順番で並べる
・文字列はシングルクォートで囲む:'田中' のように。数値はそのまま書く
大切なのは、列の並び順と値の並び順が1対1で対応する点です。(ID, 名前, 部署) に対して (4, '田中', '開発') なら、ID=4・名前=田中・部署=開発になります。順番がずれると意図しない値が入ってしまうため注意します。
INSERT・SELECT・UPDATE・DELETE の4つをまとめてDML(=Data Manipulation Language、データ操作言語)と呼びます。これは、表の中のデータを操作するための命令のグループです。
なぜ4種類に分かれているのか。データへの操作は「増やす・読む・変える・消す」の4パターンに分類でき、それぞれ別の命令になっています。
・INSERT:行を追加する(今のページ)
・SELECT:条件に合う行を検索・取得する
・UPDATE:既存の行の値を変更する
・DELETE:条件に合う行を削除する
INSERT は「まだ存在しない新しい行を作る」唯一の命令です。UPDATE や DELETE は既存の行を対象にするため WHERE で行を絞り込む必要がありますが、INSERT は空の行に値を入れて追加するため WHERE が不要な点が特徴です。
INSERT 文では、列の並び順と VALUES の値の並び順が1対1で対応します。コンピュータは「1番目の列 ← 1番目の値」「2番目の列 ← 2番目の値」という機械的なルールで代入します。
なぜ順番が重要なのか。列名と値は別々に書かれているため、コンピュータは位置だけを手がかりにどちらをどちらに入れるかを決めます。順番がずれると、数値を入れるべき ID 列に文字列が入って型エラーになるか、もしくは意図と違う値が静かに入ってしまいます。
・正しい例:(ID, 名前) VALUES (4, '田中') → ID=4、名前=田中
・NG 例:(ID, 名前) VALUES ('田中', 4) → ID列に文字が入り型エラー
なお、列指定を省略して INSERT INTO 社員 VALUES (4, '田中', '開発') と書くことも可能ですが、その場合は表が持つ全列の順番どおりに値を並べる必要があります。列名を明示する書き方のほうがミスに気づきやすいためおすすめです。
INSERT は、表に設定された制約(=守るべき決まり)に違反するとエラーになり、レコードは追加されません。代表的な制約違反は次のとおりです。
・一意性制約(主キーの重複):主キーは表内で重複できないため、既にある ID を追加するとエラー
・NOT NULL 制約:値が必須の列に値を入れない(NULL =値なし)とエラー
・参照整合性制約(外部キー):別の表に存在しない値を参照するとエラー
・データ型・桁数の不一致:数値列に文字を入れるなど、列の型に合わない値はエラー
たとえば会員番号を主キーにした名簿で、すでに使われている番号で新規登録しようとすると弾かれるのと同じです。制約はデータの正しさ(整合性)を守るための仕組みで、INSERT 時にこれをチェックすることで、おかしなデータが入るのを防いでいます。