JDBCでMySQL、複数プライマリーキーテーブルのauto_increment設定でエラー

JDBCMySQL複数プライマリーキーauto increment
目次

Spring bootで複数@IDを設定したentityを作成

Spring bootで複数のプライマリーキーを持つテーブルを作成しました。そのままrunするとテーブルが作成されましたが、アプリを動かすとエラーが発生。生成されたテーブル構造を確認すると、entityにauto_increment設定をしていたカラムが、実際にはauto_incrementがついておらず、nullで登録できないよ!なエラーとなっていました。↓こんな感じのエンティティです。

複数プライマリーキーがある時のauto_increment設定方法

普通に修正しようと思ったら何度か怒られたのでメモです。一度、今ついているプライマリーキーを削除して、新しくプライマリーキーを貼り直す必要があります。

修正前のテーブル構造

mysql> show columns from testtable;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 1st_id       | bigint      | NO   | PRI | NULL    |       |
| 2nd_id       | bigint      | NO   | PRI | NULL    |       |
| 3rd_id       | bigint      | NO   | PRI | NULL    |       |
| created_at   | datetime(6) | YES  |     | NULL    |       |
| updated_at   | datetime(6) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

1st_idがauto_incrementのはずなのですが、Extraに「auto_increment」の記載がないですね。。

1st_id, 2nd_id, 3rd_idの3カラムがprimary keyとなるテーブルです。

idにauto_incrementを付与する手順

こちらが実際の手順です。1st_id, 2nd_id, 3rd_idの3カラムがprimary keyとなるテーブルにおいて1st_idにauto_incrementを付与します。

# ①該当テーブルの既存primary keyをdrop
mysql > ALTER TABLE testtable DROP PRIMARY KEY;

# ②Primary keyにする複数カラムをprimary keyに設定。先頭のカラムがauto_incrementしたいものであること!
mysql > ALTER TABLE testtable ADD CONSTRAINT PRIMARY KEY (1st_id, 2nd_id, 3rd_id);

# ③auto_incrementするカラムの属性を変更
mysql > ALTER TABLE testtable CHANGE COLUMN 1st_id 1st_id bigint auto_increment;

特に注意する点が、②のprimary key設定の際のカラム並び順です。先頭に③でauto_incrementを設定したいカラムを書きます

修正後のテーブル構造

mysql> show columns from testtable; 
+--------------+-------------+------+-----+---------+------------+ 
| Field      | Type        | Null | Key | Default | Extra        | 
+------------+-------------+------+-----+---------+--------------+ 
| 1st_id     | bigint      | NO   | PRI | NULL    |auto_increment| 
| 2nd_id     | bigint      | NO   | PRI | NULL    |              | 
| 3rd_id     | bigint      | NO   | PRI | NULL    |              | 
| created_at | datetime(6) | YES  |     | NULL    |              | 
| updated_at | datetime(6) | YES  |     | NULL    |              | 
+------------+-------------+------+-----+---------+--------------+

無事idカラムにauto_incrementがつきました。これで完成です🎉

MySQL関連の他記事はこちら

UoPeople・プログラミング関連のつぶやきはこちら

JDBCMySQL複数プライマリーキーauto increment

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ピープル大学(UoPeople)でコンピューターサイエンスを学んでいます。趣味はプログラミング。

コメント

コメントする

目次