質問編集履歴

1

一部情報追加

2016/12/25 08:46

投稿

zico_teratail
zico_teratail

スコア907

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,4 @@
1
1
  現在MySQL 5.5.45、InnoDBで使っています。
2
-
3
-
4
2
 
5
3
  様々な場面で、AUTO_INCREMENTを設定した主キーの値が意図したとおりの動作にならずに困ることがあります。
6
4
 
@@ -11,6 +9,8 @@
11
9
  - INSERT...ON DUPLICATE KEY UPDATE
12
10
 
13
11
  - INSERT IGNORE
12
+
13
+ - REPLACE
14
14
 
15
15
 
16
16
 
@@ -24,9 +24,15 @@
24
24
 
25
25
 
26
26
 
27
- 参考:[【MySQLAUTO_INCREMENTの値増える、欠番が発生する at softelメモ](https://www.softel.co.jp/blogs/tech/archives/2651)
27
+ REPLACEなどは挙動をよく理解しておかないと致命的なことになりかねません。特にオートインクリメントしたidをサロゲートキーとして使っている場合は。「マニュアル読め」と言われればそれまでですが、一般的な人間の感覚からはだいズレた「MySQL(DB全般?)特有の動作」と言っていいのではないでしょうか。
28
28
 
29
29
 
30
+
31
+ ---
32
+
33
+
34
+
35
+ 参考:[【MySQL】AUTO_INCREMENTの値が増える、飛ぶ、欠番が発生する at softelメモ](https://www.softel.co.jp/blogs/tech/archives/2651)
30
36
 
31
37
 
32
38
 
@@ -34,9 +40,13 @@
34
40
 
35
41
 
36
42
 
43
+ 参考:[サロゲートキー](https://www.google.co.jp/search?q=%E3%82%B5%E3%83%AD%E3%82%B2%E3%83%BC%E3%83%88%E3%82%AD%E3%83%BC&rlz=1C1TWJA_jaJP505JP506&oq=%E3%82%B5%E3%83%AD%E3%82%B2%E3%83%BC%E3%83%88%E3%82%AD%E3%83%BC&aqs=chrome..69i57j0l5.151j0j4&sourceid=chrome&ie=UTF-8) - Google 検索
37
44
 
38
45
 
39
46
 
47
+
48
+
49
+ ---
40
50
 
41
51
  たとえば
42
52
 
@@ -54,8 +64,6 @@
54
64
 
55
65
  を投げると、id値は「1,2,4」となります。
56
66
 
57
-
58
-
59
67
  実用上はそれでも問題ないのかもしれませんが、人間の心情的にはidを連続した値にしてほしいところです。
60
68
 
61
69
 
@@ -68,6 +76,12 @@
68
76
 
69
77
 
70
78
 
79
+ ---
80
+
81
+
82
+
83
+
84
+
71
85
  参考:[kamipo TRADITIONALでは防げないINSERT IGNOREという名の化け物 | おそらくはそれさえも平凡な日々](http://www.songmu.jp/riji/entry/2015-07-20-insert-ignore.html)
72
86
 
73
87