TroubleShooting

[데이터 무결성 위반] nested exception is org.springframework.dao.DataIntegrityViolationException

뭉지(moonz) 2022. 1. 27. 17:26
반응형

발생 에러

Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement

DataIntegrityViolationException, 즉 데이터 무결성 (Data Integrity) 위반 문제(Violation Exception)가 발생했다. 

에러 원인

Review id를 외래키로 참조하고 있는 Comment 테이블이 있기 때문에 Review 데이터를 제거하려할 때 이를 참조하고있는 Comment 테이블의 외래키 필드 Review_id의 무결성에 침해되므로 문제가 발생한다. (외래키의 무결성 제약조건에 위배)

 

* 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것

해결

키값이 삭제되면 이를 참조하고 있는 컬럼도 같이 삭제될 수 있도록 기존 제약조건을 제거 후 새롭게 추가해야 한다.

 

+) 제약조건 명을 모른다면 아래 명령어를 통해 찾을 수 있다.

select * from information_schema.table_constraints;

명령어를 통해 찾은 제약조건 명

 

1. 기존 제약 조건 삭제

ALTER TABLE {참조하고있는 테이블명} DROP FOREIGN KEY {제약조건 명};

2. 새 제약 조건 추가

ALTER TABLE {참조하고있는 테이블명} ADD CONSTRAINT {제약조건 명} FOREIGN KEY ({참조할 칼럼 명}) REFERENCES {참조할 테이블 명} ({pk 칼럼명}) ON DELETE CASCADE;

 

예)

예제) 제약조건 명의 '_'가 보이지 않아 표시했습니다

반응형