MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】ユーザー定義変数とLAST_INSERT_ID()を使って2つのテーブルに異なる自動インクリメントIDを設定する方法

MySQLでは、LAST_INSERT_ID()関数とユーザー定義変数を組み合わせることで、2つのテーブルにそれぞれ異なる自動インクリメントIDを設定できます。この記事では、その具体的な手順をサンプルコード付きで解説します。

手順1: 最初のテーブルを作成する

まず、StudentIdカラムにAUTO_INCREMENT(自動インクリメント)を設定したテーブルを作成します。

mysql> create table DemoTable1 (StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query OK, 0 rows affected (0.58 sec)

手順2: レコードを挿入する

INSERTコマンドを使ってテーブルにレコードを追加します。AUTO_INCREMENTカラムにはnullを指定することで、自動的に連番が採番されます。

mysql> insert into DemoTable1 values(null);
Query OK, 1 row affected (0.18 sec)

手順3: 挿入されたレコードを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1;

実行結果は以下の通りです。

+-----------+
| StudentId |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)

自動インクリメントによって「1」が採番されていることが確認できます。

手順4: 最後に挿入されたIDをユーザー定義変数に保存する

次に、LAST_INSERT_ID()を使って最後に挿入されたIDを取得し、ユーザー定義変数@studentIdに格納します。

mysql> set @studentId = last_insert_id();
Query OK, 0 rows affected (0.00 sec)

これで、直前に採番されたID(この場合は「1」)が変数に保持されます。

手順5: 2つ目のテーブルを作成する

続いて、2つ目のテーブルを作成します。ここでは通常のint型カラムを用意します。

mysql> create table DemoTable2 (Id int);
Query OK, 0 rows affected (0.61 sec)

手順6: 変数を利用して異なるIDを挿入する

ここがポイントです。ユーザー定義変数に「+1」した値を挿入することで、1つ目のテーブルとは異なる自動連番を実現できます。

mysql> insert into DemoTable2 values(@studentId + 1);
Query OK, 1 row affected (0.13 sec)

手順7: 結果を確認する

SELECT文で2つ目のテーブルの内容を確認しましょう。

mysql> select * from DemoTable2;

実行結果は以下の通りです。

+------+
| Id   |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

まとめ

このように、LAST_INSERT_ID()で取得した直近の自動インクリメント値をユーザー定義変数に保存すれば、別テーブルに対しても「元のID + 1」といった形で、重複しない異なる連番IDを簡単に設定できます。トランザクション内で複数テーブルに関連IDを振りたい場合などに活用すると便利です。

  1. MySQLで2つのテーブルを比較して欠落しているIDを抽出する方法

    MySQLで2つのテーブルを比較し、片方のテーブルに存在しないID(欠落しているID)を取得したい場合は、サブクエリとNOT IN句を組み合わせるのが基本的な方法です。基本構文以下が、2つのテーブルを比較して欠落しているIDを返すための基本構文です。SELECT テーブル名1.IDカラム名 FROM テーブル名1WHERE IDカラム名 NOT IN (SELECT テーブル名2.IDカラム名 FROM テーブル名2);この構文では、サブクエリで2つ目のテーブルに存在するIDの一覧を取得し、1つ目のテーブルの中でその一覧に含まれないIDだけを抽出しています。それでは、実際にサンプルデータを使っ

  2. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手