Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 '!'와 NOT 연산자의 우선순위 차이 – HIGH_NOT_PRECEDENCE SQL 모드가 결정합니다

MySQL에서 NOT과 '!' 연산자의 우선순위 차이

MySQL에서 논리 부정 연산자인 '!'NOT의 우선순위 관계는 고정되어 있지 않습니다. 두 연산자 중 어느 쪽이 먼저 적용되는지는 HIGH_NOT_PRECEDENCE SQL 모드의 활성화 여부에 따라 달라집니다.

1. HIGH_NOT_PRECEDENCE 모드가 비활성화된 경우 (기본값)

MySQL의 기본 설정에서는 '!' 연산자가 NOT 연산자보다 더 높은 우선순위를 가집니다. 즉, 복합 조건식에서 '!'가 NOT보다 먼저 평가됩니다.

2. HIGH_NOT_PRECEDENCE 모드가 활성화된 경우

이 모드를 활성화하면 '!' 연산자가 NOT 연산자와 동일한 우선순위를 갖게 됩니다. 이는 MySQL 5.0.2 이전 구버전의 동작 방식과의 호환성을 유지해야 하는 환경에서 유용하게 사용됩니다.

예제로 확인하는 우선순위 차이

아래 예제는 같은 식이라도 모드 설정에 따라 해석 결과가 달라지는 것을 보여줍니다.

-- 기본 모드 (HIGH_NOT_PRECEDENCE 비활성화)
-- '!'가 우선 적용되어 (!1) BETWEEN 0 AND 2 로 해석됨
SELECT ! 1 BETWEEN 0 AND 2;   -- 결과: 1

-- HIGH_NOT_PRECEDENCE 활성화 후
SET sql_mode = 'HIGH_NOT_PRECEDENCE';
-- NOT과 동일한 우선순위가 되어 !(1 BETWEEN 0 AND 2) 로 해석됨
SELECT ! 1 BETWEEN 0 AND 2;   -- 결과: 0

정리

  • 모드 비활성화 시(기본값): '!' > NOT 순으로 '!'의 우선순위가 더 높음
  • 모드 활성화 시: '!'와 NOT의 우선순위가 동일함
  • 구버전 MySQL과의 쿼리 호환성이 필요하다면 HIGH_NOT_PRECEDENCE 모드 사용을 고려할 수 있습니다.