• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AUTO_INCREMENTの動作について)

AUTO_INCREMENTの動作について

このQ&Aのポイント
  • mysqlデータベースのAUTO INCREMENT値に関する質問です。
  • 一時的なテーブルにデータを格納し、必要な操作が終わったらほかのテーブルに移し、一時的なテーブルの中のエントリを削除する設定なんですが、AUTO_INCREMENTは30まで登りましたが、29以下のエントリは既に削除しています。
  • データを移すときに、その番号を識別子として使いますので大問題になっています。AUTO_INCREMENTの正常な動作は避けることはできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>信じられないことに、31を識別子として挿入してくれなくて、15挿入されてしまいました! auto_incrementはデータを削除しても戻らないのはわかりますね? また、auto_incrementは競合しなければ数値を指定して挿入できます。 当然auto_incrementのクリアもできます それを踏まえてこんな感じでわかりますか? (1)create table hoge(id int not null primary key auto_increment,data varchar(10)); insert into hoge (data) value('a'),('b'),('c'),('d'); select * from hoge; (2)delete from hoge; insert into hoge (data) value('e'),('f'),('g'),('h'); select * from hoge; (3)delete from hoge; insert into hoge (id,data) value(1,'i'),(2,'j'),(null,'k'),(null,'l'); select * from hoge; (4)delete from hoge; alter table hoge auto_increment=1; insert into hoge (data) value('m'),('n'),('o'),('p'); select * from hoge;

2B2B
質問者

お礼

ご回答ありがとうございます。 やっぱり戻らないはずですね。エラーの原因は、たぶんDELETE文が正しく実行されなかったんじゃないかと思います。

その他の回答 (1)

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.2

削除はどのように行っていますか? TRUNCATE でデータを削除すると、AUTO_INCREMENT の値がリセットされるとのことです。 DELETE ではリセットされません。 http://www.dbonline.jp/mysql/insert/index12.html 手元の MySQL 5.0 ではそのような動きになりました。

2B2B
質問者

お礼

ご回答ありがとうございます。 TRUNCATEは実行していませんが、今度TRUNCATEを利用すればこれも考える必要がありますね。

関連するQ&A

専門家に質問してみよう