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