「最大値+1」で連番を作成する(AUTO_INCREMENTを使わない)

MySQLで商品番号などに使う連番を作成するにはAUTO_INCREMENTが最も簡単ですが、自前で連番を作成したい場合はどうすれば良いでしょうか。たとえば、次のような商品データがあります。次に追加する商品のidはどのように生成すればよいでしょうか。ただし、id列は自動で連番を生成するAUTO_INCREMENT列ではありません。

※AUTO_INCREMENTの意味や仕組みについては、以下の記事を参考にしてください。
phpMyAdminで作成するテーブルのidに連番を割り振るには

mysql> SELECT * FROM products;
+----+----------+-------+
| id | name     | price |
+----+----------+-------+
|  1 | キャベツ |   120 |
|  2 | リンゴ   |    80 |
|  3 | メロン   |   300 |
+----+----------+-------+
3 rows in set (0.01 sec)

 次のようにid列の最大値に1を加算すれば次のidを取得することができます。

mysql> SELECT MAX(id) + 1 FROM products;
+-------------+
| MAX(id) + 1 |
+-------------+
|           4 |
+-------------+
1 row in set (0.00 sec)

 これをINSERT文に組み込むと、次のように新たな商品を追加することができます。

mysql> INSERT INTO products(id, name, price)
    ->   SELECT MAX(id) + 1, 'イチゴ', 120 FROM products;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM products;
+----+----------+-------+
| id | name     | price |
+----+----------+-------+
|  1 | キャベツ |   120 |
|  2 | リンゴ   |    80 |
|  3 | メロン   |   300 |
|  4 | イチゴ   |   120 |
+----+----------+-------+
4 rows in set (0.00 sec)

(西沢直木著:『SQL逆引きレシピ (PROGRAMMER’S RECiPE)』より)

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク