tech.chakapoko.com
Home / MySQL

[MySQL]シーケンス用のテーブルを作る

AUTO_INCREMENT

MySQLで連番を使うにはテーブル作成時にAUTO_INCREMENTを指定します。

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '',
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

しかし、テーブルにデータを入れる前にそのidを取得しておきたい時などはそのテーブルとは別に何か連番を生成する仕組みが必要です。

PostgreSQLなどには連番を生成する仕組みがありますが、MySQLにはありません。ですが簡単なテーブルを作り、採番に利用することができます。

採番用テーブルの作成

まず採番用のテーブルを作り、初期値をセットします。

CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);

採番の実行

採番する際は LAST_INSERT_ID 関数を使って次のようなSQLを実行します。

UPDATE sequence SET id = LAST_INSERT_ID(id + 1);
SELECT LAST_INSERT_ID();

LAST_INSERT_ID 関数は通常前回のINSERTでのAUTOINCREMENTカラムの値を返しますが、引数を指定するとそれが LAST_INSERT_ID() によって次に返される値として記憶されます。またその値は接続ごとに保持されるので複数のユーザーからの接続がある場合でも安全に採番できます。