본문 바로가기
공부/기타

[DB_MySQL] Field ''doesn't have a default value / Error code 1833 used in a foreign key constraint 오류 간단한 해결법

by happyeuni 2022. 8. 9.

스프링에서는

ERROR 20104 --- [nio-8282-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   
: Field 'record_img_id' doesn't have a default value

이런 오류가 났었고

 

DB 에서는 아래와 같은 오류가 났다.

 

이유는 img_id가 제대로 들어가지 않았기 때문이다.

 

 

 

먼저 스프링에서 auto increment로 설정하기 위해  엔티티에서 @GeneratedValue(strategy = GenerationType.IDENTITY)

를 써준다.

	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "img_id")
    private int id;

나의 경우 이건 잘 써있었지만 DB에서 AUTO INCREMENT가 되어있지 않았다.

그런데 이것만 추가하려고 보니 

Error 1833: Cannot change column 'img_id': used in a foreign key constraint 'img_id' of table 'mydb.record' SQL Statement
: ALTER TABLE `mydb`.`img`  CHANGE COLUMN `img_id` `img_id` INT NOT NULL AUTO_INCREMENT

이런 오류가 났는데 이건 연관관계로 이 img_id를 다른 테이블에서 외래키로 사용하고 있는 구간이 있기 때문이었다.

 

그동안 외래키 참조 오류가 나면 테이블 데이터를 지우고 다시 생성하는 방식을 사용했었는데 더 간단한 방법을 찾았다.

 

바로!!!!

외래키 검사를 껐다 키는 것이다.

SET FOREIGN_KEY_CHECKS = 0;

/* 하고싶은 작업 */

SET FOREIGN_KEY_CHECKS = 1;

이렇게 한다면 아주 간단하게 할 수있지만 데이터의 무결성을 직접 수동으로 검증해야하므로 데이터가 손실나지 않도록 조심해야한다.

그럼 해결 끝~

다른 방법을 아시는 분이 계시다면 댓글 달아주시면 감사하겠슴다

댓글