MySQLにLAST_INSERT_ID()という関数があります。auto_incrementedのフィールドがあって、そこにレコードが追加された時に、最後に追加されたidを取得するというものです。
ですが、LAST_INSERT_ID()には引数を渡すことができて、その結果をUPDATEに渡すと、「最後にUPDATEした数値」を取得することができます。
こんな感じ
-- 準備
CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);
-- 採番
UPDATE sequence SET id=LAST_INSERT_ID(id+1);
SELECT LAST_INSERT_ID();
まず、idというフィールドだけのテーブルを作り、1件だけレコードをINSERTしておきます。auto_incrementedでなくてもいいです。
採番時には、idをインクリメントしてUPDATEします。その際にLAST_INSERT_ID関数を経由してUPDATEします。同一セッションであれば、トランザクションで囲まなくても、先ほどUPDATEしたIDを取得することができています。INSERTじゃないので、レコードは1件のままです。
似たことは、トランザクションを区切ってやったりロックかけたりしてできないくはないのですが、こちらの方がデッドロックの心配もなく、ロジックはシンプルなのでおすすめです。