[MySQL/Maria] Update Trigger에서 데이터 NULL 비교 시 주의할 점

Jeongkuk Seo
sjk5766
Published in
3 min readApr 10, 2020

데이터베이스에서 Trigger는 특정 테이블에 대해서 데이터가 변경되는 쿼리 수행 전, 후에 우리가 원하는 작업을 DB가 수행하도록 해줍니다. UPDATE Trigger를 만들고 테스트 중 데이터가 NULL일 경우 compare되지 않는 현상 및 방안을 정리합니다.

아래와 같이 테이블을 만들고 초기 데이터를 INSERT 합니다.

reserve 테이블은 원본 데이터이고 insert_here_by_trigger는 뒤에서 만들 trigger에 의해 데이터가 insert되는 테이블입니다.

위에 INSERT 구문으로 인해 reserve 테이블에는 아래와 같이 초기 데이터가 있습니다. detail 컬럼에 null이 들어가 있는 것을 확인할 수 있습니다.

이 상태에서 아래와 같이 UPDATE trigger를 만듭니다. trigger를 설명하면, reserve 테이블에 UPDATE 하기 전 name 컬럼과 detail 컬럼의 데이터가 변경 될 경우 insert_here_by_trigger에 데이터를 추가하는 trigger 입니다.

우선 아래와 같이 name 컬럼을 다른 데이터로 변경합니다. 그러면 우리가 위에서 만든 trigger가 insert_here_by_trigger 테이블에 데이터를 추가 한 것을 확인할 수 있습니다.

이번엔 detail 컬럼의 데이터를 변경합니다. 한 가지 주의사항은 이 데이터는 현재 NULL입니다. 아래와 같이 detail 컬럼을 변경 후 insert_here_by_trigger 테이블을 확인해보면 우리가 만든 trigger가 작동하지 않은 것을 알 수 있습니다.

detail 컬럼을 update 한 상태에서 다시 update 해보면 trigger가 정상적으로 동작함을 확인할 수 있습니다.

처음에 detail 컬럼을 update 했을 때 동작하지 않은 이유는 NULL 값은 compare를 통해 변했다고 인지하지 않기 때문입니다. 따라서 trigger를 아래와 같이 COALESCE로 NULL일 경우 ‘’로 치환하는 작업을 거칩니다.

기존 reserve, insert_here_by_trigger 테이블을 삭제 후 다시 초기 값을 넣었습니다. 즉 reserve 테이블의 detail 컬럼은 현재 NULL 입니다. 이 상태에서 아래와 같이 UPDATE를 수행하면 trigger가 NULL을 ‘’로 변경하여 우리가 원하는 대로 trigger가 수행함을 확인할 수 있습니다.

--

--