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)』より)