MySQL:5.6.10
JDBCドライバ:mysql-connector-java-6.0.5.jar
Java:1.8
JavaアプリケーションよりMySQLに対してINSERTを発行した際にエラーが発生しました。
タイトルの通りなのですが、AUTO_INCREMENTを設定しているカラム('id')のあるテーブルに対してINSERT('id'は指定しません)を発行した際に以下のエラーが出ました。
Duplicate entry '389871' for key 'PRIMARY'
ちなみに上記の'389871'はエラーの出たINSERTの数時間前に登録されたレコードなので、ほぼ同時にINSERTしてエラーになったというわけでもありません。またしばらくおいて再度INSERTすると成功しました。
恐らくAUTO_INCREMENTの採番値が更新されていなかったのだと思いますが、そのような事は発生するのでしょうか?また発生しやすい状況等ありましたらご教授頂くと幸いです。
**** 追記 ****
DDLとINSERT文です(※カラム名や値は変えています)
test2テーブルのINSERTで、AI_IDの重複でエラーになります。
-- DDL CREATE TABLE test ( id int NOT NULL AUTO_INCREMENT, hoge1 varchar(10) NOT NULL, hoge2 varchar(10) NOT NULL, datetime1 datetime NOT NULL, datetime2 datetime NOT NULL, datetime3 datetime NOT NULL, datetime4 datetime NOT NULL, hoge3 varchar(50) NOT NULL, hoge4 int NOT NULL, hoge5 int NOT NULL, hoge6 varchar(255), hoge7 int NOT NULL, hoge8 int NOT NULL, hoge9 int NOT NULL, datetime5 datetime NOT NULL, datetime6 datetime NOT NULL, PRIMARY KEY (id) ) ENGINE = InnoDB; CREATE TABLE test2 ( AI_ID int NOT NULL AUTO_INCREMENT, id int NOT NULL, id2 varchar(50), hoge10 varchar(255) CHARACTER SET ascii, hoge11 varchar(10), hoge12 int, datetime1 datetime NOT NULL, datetime2 datetime NOT NULL, PRIMARY KEY (AI_ID), CONSTRAINT uq_test2_01 UNIQUE (id, id2, hoge10) ) ENGINE = InnoDB; CREATE TABLE test3 ( id2 varchar(50) NOT NULL, hoge13 text NOT NULL, hoge14 varchar(255) NOT NULL, hoge15 tinyint unsigned, hoge16 varchar(255), hoge17 date, hoge18 varchar(255), hoge19 varchar(255), hoge20 varchar(255), hoge21 varchar(255), hoge22 tinyint unsigned NOT NULL, hoge23 tinyint unsigned, hoge24 tinyint unsigned DEFAULT 0 NOT NULL, hoge25 tinyint unsigned, hoge26 datetime NOT NULL, hoge27 datetime NOT NULL, PRIMARY KEY (id2) ) ENGINE = InnoDB; ALTER TABLE test2 ADD FOREIGN KEY (id) REFERENCES test (id) ON UPDATE RESTRICT ON DELETE RESTRICT ; ALTER TABLE test2 ADD FOREIGN KEY (id2) REFERENCES test3 (id2) ON UPDATE RESTRICT ON DELETE RESTRICT ; -- INSERT文 insert into test2(id, id2, hoge10, hoge11, hoge12, datetime1, datetime2) values(211, 'id2', 'hoge10', 'hoge11', null, NOW(), NOW());