第6章 INSERTステートメント

INSERTの基本的な使い方

まず、サンプルとして利用するテーブルを定義します。ここでは、従業員情報を保持する「Employees」テーブルとします。このテーブルは以下のような構造を持つとしましょう。

CREATE TABLE Employees (
  ID INT PRIMARY KEY,
  Name VARCHAR(20),
  Department VARCHAR(20),
  Salary INT
);

次に、このテーブルに新しい従業員の情報を追加します。例えば、以下のようにIDが1のJohnという名前の従業員を追加する場合は次のようにします。

INSERT INTO Employees (ID, Name, Department, Salary)
VALUES (1, 'John', 'IT', 60000);

ここで、INSERT INTO文後のカッコ内には、データを追加するフィールド名を列挙します。そして、VALUES文後のカッコ内には、対応する値を列挙します。これにより、Johnという名前の従業員のデータがテーブルに追加されます。

この操作を実行すると、MySQLは以下のようなメッセージを表示します。

Query OK, 1 row affected (0.01 sec)

このメッセージは、1つのレコードがテーブルに追加されたことを示しています。

その後、データが正しく追加されたかを確認するために、以下のSELECT文を実行します。

SELECT * FROM Employees;

実行結果

+------------+-----------+-------------+
| first_name | last_name | department  |
+------------+-----------+-------------+
| John       | Doe       | Sales       |
| Jane       | Doe       | HR          |
| Alice      | Johnson   | Marketing   |
| Bob        | Smith     | Engineering |
+------------+-----------+-------------+

これにより、Johnのデータが正しく追加されたことが確認できます。


デフォルト値

DEFAULT値は、テーブル作成時にカラムに対して設定することができ、この値はINSERT文で明示的な値が指定されない場合に使用されます。

例えば、EmployeesテーブルでDepartmentカラムにDEFAULT値を設定する場合は、以下のようにします。

CREATE TABLE Employees (
  ID INT PRIMARY KEY,
  Name VARCHAR(20),
  Department VARCHAR(20) DEFAULT 'General',
  Salary INT
);

上記のテーブル定義では、Departmentカラムのデフォルト値として'General'が設定されています。

これにより、新しいレコードを追加するときにDepartmentカラムを省略すると、そのカラムには自動的に'General'が挿入されます。

INSERT INTO Employees (ID, Name, Salary)
VALUES (1, 'John', 60000);

上記のINSERT文ではDepartmentカラムを指定していません。そのため、デフォルト値が適用されます。

SELECT * FROM Employees;

実行結果

+----+------+------------+--------+
| ID | Name | Department | Salary |
+----+------+------------+--------+
|  1 | John | General    |  60000 |
+----+------+------------+--------+

このように、Johnのレコードについては、Departmentカラムの値がデフォルト値の'General'になっています。

なお、DEFAULT値はNULLを許容するカラムに対しても設定することが可能です。その場合、INSERT文で明示的な値が指定されないかつNULLも指定されない場合にDEFAULT値が使用されます。


バルクインサート

バルクインサートとは、一度の操作で複数のレコードをデータベースに挿入することを指します。これは大量のデータを追加する必要がある場合や、パフォーマンスを向上させるために利用されます。

MySQLのINSERT文を使用してバルクインサートを行うには、以下のようにします。

INSERT INTO Employees (ID, Name, Department, Salary)
VALUES
    (1, 'John', 'HR', 60000),
    (2, 'Jane', 'Sales', 65000),
    (3, 'Bob', 'Marketing', 70000);

このSQL文は、3つの新しいレコード(John、Jane、Bob)をEmployeesテーブルに追加します。

このようにバルクインサートを使用すると、大量のデータをデータベースに追加する際のネットワークオーバーヘッドを軽減することができ、パフォーマンスを向上させることができます。なお、大量のデータを挿入する際には、データベースのトランザクションログや一時テーブルの容量に注意が必要です。