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

回答編集履歴

1

追記

2015/07/06 13:32

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -6,4 +6,15 @@
6
6
  alter table t auto_increment = 0;
7
7
  ```
8
8
 
9
- 勝手に id の最大値+1 が次の値になるので、指定する値はなんでもいいです。
9
+ 勝手に id の最大値+1 が次の値になるので、指定する値はなんでもいいです。
10
+
11
+ ---
12
+
13
+ なお、SQL_MODE (`select @@sql_mode` で確認できる) が `STRICT_なんとか` とかになっていない場合、int のカラムに int の最大値を超える値をセットしようとすると自動的に最大値になってしまいます。
14
+
15
+ なので、392327147642648 のような値を id にセットしてしまうと 2147483647 として実際の行には挿入されます。
16
+
17
+ SQL_MODE で `STRICT_TRANS_TABLES` とか `STRICT_ALL_TABLES` とかが含まれているなら、値のオーバーフロー時にエラーになるので、このような問題が起こりにくくなります。
18
+
19
+ MySQL の auto_increment は最大値に達すると最大値が繰り返されるようになります、なのでプライマリキーによる一意制約のエラーが延々と繰り返されることになります。
20
+