質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

受付中

AUTO_INCREMENTを設定しているカラムでINSERT重複エラー

tera78
tera78

総合スコア9

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

1回答

0評価

1クリップ

2420閲覧

投稿2020/04/16 06:44

編集2022/01/12 10:55

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());

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

javahack

2020/04/16 11:40

テーブル定義と発行したSQL文を質問に追記した方が回答が得られやすくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。