코딩항해기

[Error/Oracle] update 시 SQLException : unique 제약조건 위배 본문

Error solution

[Error/Oracle] update 시 SQLException : unique 제약조건 위배

miniBcake 2024. 9. 9. 17:15

 

멤버 테이블에 있는 닉네임에 unique 제약조건이 있을 때,

A 닉네임을 가진 사람을 다시 A 닉네임으로 업데이트할 때 발생하는 오류이다.

 

A 닉네임은 이미 해당 테이블에 있는 값이기 때문에 사용할 수 없다는 것이다.

하지만 프로젝트 설계 상 개인정보를 업데이트할 때 업데이트가 한 번에 진행되기 때문에 동일한 값도 다시 업데이트되어야하는 상황이다.

 

이 때는 두 가지 방법이 있다.

 

1. Controller의 데이터를 전적으로 신뢰하는 방법

Controller가 주는 데이터가 unique하다고 생각하는 것이다. 이미 사전에 검증을 거치고 DB에 데이터가 전달되는 경우에는 이 방법을 사용할 수 있고, 이 방법은 테이블의 unique 제약조건을 삭제하는 것이다.

단점은, Controller에서 넘어오는 데이터가 unique하지 않게 되면 DB에서 거르지 못하고 바로 저장된다.

 

2. 변경된 데이터만 업데이트

설계를 수정해서 Controller가 변한 값만 확인 한 뒤 해당하는 값만 업데이트하는 방식이다.

Condition 분기가 많아지고, 기존 설계와 달라지지만 DB에 unique하지 않는 값이 저장되는 것을 막을 수 있다.

 

상황에 맞춰 수정하면 된다.