質問編集履歴
1
一部情報追加
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
|
-
|
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
|
|