MySQLで同じテーブルにMAX(col)+1の値を挿入する方法
MySQLで同じテーブルにMAX(col)+1の値を挿入する方法
MySQLでは、既存カラムの最大値に1を加えた値を、同じテーブルへ挿入したいケースがあります。例えば、連番を手動で管理しているテーブルに新しいレコードを追加する場合などが典型例です。この記事では、INSERT ... SELECT構文とMAX()関数を組み合わせて実現する方法を、実際のSQL例とともに解説します。
1. サンプルテーブルの作成
まず、デモ用のテーブルを作成しましょう。
mysql> create table DemoTable1484
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.46 sec)
2. レコードの挿入
続いて、INSERTコマンドを使用してテーブルに複数のレコードを挿入します。
mysql> insert into DemoTable1484 values(100);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1484 values(175);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1484 values(165);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1484 values(145);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1484 values(170);
Query OK, 1 row affected (0.10 sec)
3. 挿入したデータの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示します。
mysql> select * from DemoTable1484;
このクエリを実行すると、以下の出力が得られます。
+------+
| Id |
+------+
| 100 |
| 175 |
| 165 |
| 145 |
| 170 |
+------+
5 rows in set (0.00 sec)
4. MAX(col)+1を同じテーブルに挿入するクエリ
ここが本題です。同じテーブルのIdカラムに対して、現在の最大値+1の値を挿入するには、以下のようにINSERT ... SELECT構文を使用します。
mysql> insert into DemoTable1484(Id) select max(Id)+1 from DemoTable1484;
Query OK, 1 row affected (0.20 sec)
Records: 1 Duplicates: 0 Warnings: 0
ポイントは、INSERT先とSELECT元が同じテーブルであっても、この構文がそのまま使えることです。MAX(Id)+1の計算結果が直接新しい行として挿入されます。
5. 実行結果の確認
最後に、テーブルの内容をもう一度確認してみましょう。
mysql> select * from DemoTable1484;
以下の出力から、最大値だった「175」に1を加えた「176」が正常に挿入されていることがわかります。
+------+
| Id |
+------+
| 100 |
| 175 |
| 165 |
| 145 |
| 170 |
| 176 |
+------+
6 rows in set (0.00 sec)
まとめ
INSERT INTO テーブル名(カラム名) SELECT MAX(カラム名)+1 FROM 同じテーブル名; という構文を使えば、同一テーブル内の最大値+1の値を簡単に挿入できます。なお、複数ユーザーによる同時書き込みが発生する環境では競合に注意が必要です。そのような場合は、AUTO_INCREMENT属性の利用もあわせて検討するとよいでしょう。
-
【MySQL】トリガーを使って別のテーブルに行を自動挿入する方法
はじめに:トリガーとは MySQLのトリガー(TRIGGER)を使うと、あるテーブルに対してINSERT・UPDATE・DELETEなどの操作が行われたときに、自動的に別の処理を実行できます。本記事では、「Table1に行を挿入したら、同じ内容がTable2にも自動的に挿入される」というトリガーの作成手順を具体例とともに解説します。 ステップ1:1つ目のテーブルを作成する まず、CREATE文を使用してテーブルを作成します。 mysql> create table Table1 -> ( -> id int, -> name varchar(100)
-
PythonでMySQLデータベースへの挿入後にIDを取得する方法
はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ