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()
によって次に返される値として記憶されます。またその値は接続ごとに保持されるので複数のユーザーからの接続がある場合でも安全に採番できます。