teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2020/07/10 07:45

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -6,4 +6,6 @@
6
6
  >
7
7
  > すべてのロックモード (0、1、および 2) では、自動インクリメント値を生成したトランザクションがロールバックされると、**これらの自動インクリメント値が「失われます」**。「INSERT のような」ステートメントが完了したかどうか、およびそれを含むトランザクションがロールバックされたかどうかに関係なく、**自動インクリメントカラムの値は一度生成されたら、ロールバックできません。**このような失われた値は再使用されません。したがって、テーブルの AUTO_INCREMENT カラムに格納されている値にはギャップが存在する可能性があります。
8
8
 
9
- 欠番無しの連番を保証したいなら、排他制御を行う発番処理を自作するしかありません。
9
+ 欠番無しの連番を保証したいなら、排他制御を行う発番処理を自作するしかありません。
10
+
11
+ 見た目上の連番なら、[row_number()](https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number)を使用すれば可能です。

2

推敲

2020/07/10 07:45

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -4,6 +4,6 @@
4
4
 
5
5
  > 「失われた」自動インクリメント値とシーケンスギャップ
6
6
  >
7
- > すべてのロックモード (0、1、および 2) では、自動インクリメント値を生成したトランザクションがロールバックされると、これらの自動インクリメント値が「失われます」。「INSERT のような」ステートメントが完了したかどうか、およびそれを含むトランザクションがロールバックされたかどうかに関係なく、自動インクリメントカラムの値は一度生成されたら、ロールバックできません。このような失われた値は再使用されません。したがって、テーブルの AUTO_INCREMENT カラムに格納されている値にはギャップが存在する可能性があります。
7
+ > すべてのロックモード (0、1、および 2) では、自動インクリメント値を生成したトランザクションがロールバックされると、**これらの自動インクリメント値が「失われます」**。「INSERT のような」ステートメントが完了したかどうか、およびそれを含むトランザクションがロールバックされたかどうかに関係なく、**自動インクリメントカラムの値は一度生成されたら、ロールバックできません。**このような失われた値は再使用されません。したがって、テーブルの AUTO_INCREMENT カラムに格納されている値にはギャップが存在する可能性があります。
8
8
 
9
9
  欠番無しの連番を保証したいなら、排他制御を行う発番処理を自作するしかありません。

1

追記

2020/07/10 07:41

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -4,4 +4,6 @@
4
4
 
5
5
  > 「失われた」自動インクリメント値とシーケンスギャップ
6
6
  >
7
- > すべてのロックモード (0、1、および 2) では、自動インクリメント値を生成したトランザクションがロールバックされると、これらの自動インクリメント値が「失われます」。「INSERT のような」ステートメントが完了したかどうか、およびそれを含むトランザクションがロールバックされたかどうかに関係なく、自動インクリメントカラムの値は一度生成されたら、ロールバックできません。このような失われた値は再使用されません。したがって、テーブルの AUTO_INCREMENT カラムに格納されている値にはギャップが存在する可能性があります。
7
+ > すべてのロックモード (0、1、および 2) では、自動インクリメント値を生成したトランザクションがロールバックされると、これらの自動インクリメント値が「失われます」。「INSERT のような」ステートメントが完了したかどうか、およびそれを含むトランザクションがロールバックされたかどうかに関係なく、自動インクリメントカラムの値は一度生成されたら、ロールバックできません。このような失われた値は再使用されません。したがって、テーブルの AUTO_INCREMENT カラムに格納されている値にはギャップが存在する可能性があります。
8
+
9
+ 欠番無しの連番を保証したいなら、排他制御を行う発番処理を自作するしかありません。