MySQL に存在しない場合は挿入
このチュートリアルでは、MySQL データベースのテーブルで INSERT IF NOT EXISTS
句を使用する方法を理解することを目的としています。
テーブル内の存在を確認せずに、テーブルの特定の列に特定の値を挿入することがよくあります。ただし、特定のテーブルに値を挿入するときに、値の重複を避ける必要がある場合があります。
自動車販売店の例を考えてみましょう。cars
テーブルにデータを挿入するときに、特定のタイプの車の car id
がテーブルに 2 回挿入されることは望ましくありません。
MySQL には、この操作を効率的に実行するのに役立つ INSERT IF NOT EXISTS
句が用意されています。INSERT IF NOT EXISTS
の基本的な構文は次のとおりです。
INSERT INTO name_of_the_table (column_name)
SELECT * FROM (SELECT value_name) AS val
WHERE NOT EXISTS (<conditonal expression>);
name_of_the_table
では、conditonal expression
が満たされた場合、column_name
に value_name
を挿入します。
ただし、始める前に、ダミーのデータセットを作成しましょう。
-- create the table student_details
CREATE TABLE student_details(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_lastName varchar(255) DEFAULT NULL,
primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
VALUES(1,"Preet","Sanghavi"),
(2,"Rich","John"),
(3,"Veron","Brow"),
(4,"Geo","Jos"),
(5,"Hash","Shah"),
(6,"Sachin","Parker"),
(7,"David","Miller");
MySQL の INSERT IF NOT EXISTS
stu_id
を 8
として Preet
という名前の新しい学生を挿入することにより、MySQL で INSERT IF NOT EXISTS
を使用する方法を理解しましょう。
ただし、この値を挿入するのは、テーブル内の既存の学生の名が Preet
と一致しない場合のみです。この操作は、次のクエリを使用して実行できます。
INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 8 as stu_id, 'Preet' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Preet'
) LIMIT 1;
次に、次のクエリで student_details
テーブルを確認します。
SELECT * from student_information;
前述のクエリにより、次の出力が得られます。
stu_id stu_firstName stu_lastName
1 Preet Sanghavi
2 Rich John
3 Veron Brow
4 Geo Jos
5 Hash Shah
6 Sachin Parker
7 David Miller
ご覧のとおり、student_details
テーブルには Preet
という名がすでに存在するため、新しい値はテーブルに追加されていません。
stu_id
を 9
、stu_firstName
を Dhruv
、stu_lastName
を Shah
として別の生徒を追加してみましょう。この操作は、次のクエリを使用して実行できます。
INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 9 as stu_id, 'Dhruv' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Dhruv'
) LIMIT 1;
上記のクエリに見られるように、stu_firstName
の生徒がまだテーブルに存在しない場合は、Dhruv
として追加します。
前述のクエリの出力は次のとおりです。
stu_id stu_firstName stu_lastName
1 Preet Sanghavi
2 Rich John
3 Veron Brow
4 Preet Jos
5 Hash Shah
6 Sachin Parker
7 David Miller
9 Dhruv Shah
名に重複がないため、stu_id
を 9
として持つ新しいエントリ Dhruv Shah
が作成されました。
したがって、INSERT IF NOT EXISTS
ステートメントを使用すると、挿入する値が MySQL の NOT EXISTS
句で必要な条件を満たす場合、テーブルに詳細を効率的に入力できます。