유니크키 널 데이터 중복적재 이슈

차지현·2022년 3월 18일
0

복합 유니크키에 컬럼이 추가됨에 따라 생긴 이슈
복합유니크키 컬럼중 한 컬럼의 값이 null인 데이터가 적재되어있으면, 해당 데이터는 중복이 아닌것으로 간주된다.

ex)
——————————
col1 | col2 | col3 | col4
——————————
vlaue1 | value2 | 123 | null
value1 | value2 | 123 | null

예시와 같이 중복데이터가 허용되어 적재됨
다만 C,U,D 실행이 될경우, 해당 스레드의 트랜잭션이 테이블의 데이터 변경을 허용하지 않는다(lock)
이후 다른 트랜잭션의 데이터 변경은 먼저 실행한 트랜잭션이 commit되는 시점에 허용된다.

중복데이터의 적재를 막는 방안으로 가상컬럼 및 유니크 인덱스를 추가했다.

-- ALTER TABLE test_table ADD virtual_col4 varchar(100) as (CASE WHEN col4 is NULL THEN 'NULL' ELSE ACTION_CD END) virtual,
-- ALTER TABLE test_table ADD UNIQUE INDEX test_table_UN_INDEX (col1, col2, col3, virtual_col4)

데이터가 null일 경우 문자열 'NULL'을 적재해서 고유한 데이터를 식별할수 있게했다.

profile
의 가상메모리 공간📂

0개의 댓글