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

내장 함수 이름을 구문 분석할 때 파서가 따르는 기본 규칙은 무엇일까?

내장 함수 이름을 구문 분석할 때 파서가 따르는 기본 규칙

실제로 파서(parser)는 내장 함수의 이름과 동일한 단어를 만나면, 그 이름이 함수 호출을 의미하는지 아니면 테이블 이름·컬럼(열) 이름처럼 식별자(identifier)에 대한 비표현식 참조인지 판단해야 합니다. 다음 두 개의 쿼리를 예시로 살펴보겠습니다.

1. SELECT SUM(salary) FROM employee;
2. CREATE TABLE sum (i INT);

첫 번째 쿼리에서 SUM은 함수 호출에 대한 참조로 해석되지만, 두 번째 쿼리에서는 테이블 이름으로 사용되고 있습니다. 이처럼 같은 단어가 문맥에 따라 전혀 다른 의미를 가질 수 있기 때문에, 파서는 이를 구분하기 위한 명확한 기준이 필요합니다.

파서가 적용하는 두 가지 기본 규칙

파서는 해당 이름이 함수 호출로 사용되었는지, 아니면 비참조(non-reference) 맥락에서 식별자로 사용되었는지 구분하기 위해 다음 두 가지 규칙을 따릅니다.

  • 규칙 1 — 표현식 안에서 이름을 함수 호출로 사용하려면, 이름과 바로 뒤따르는 여는 괄호 '(' 사이에 공백이 없어야 합니다. 즉, SUM(salary)처럼 붙여 써야 함수 호출로 인식됩니다.
  • 규칙 2 — 반대로, 함수 이름을 식별자(예: 테이블 이름)로 사용하려면 이름 뒤에 괄호가 바로 이어져서는 안 됩니다.

참고로 MySQL에서는 IGNORE_SPACE SQL 모드를 활성화하면 함수 이름과 괄호 사이의 공백을 허용할 수 있으며, 이 경우 함수 이름을 식별자로 사용하는 데 일부 제약이 따를 수 있습니다. 이러한 파싱 규칙을 잘 이해해두면 구문 오류를 예방하고 가독성 높은 SQL을 작성하는 데 큰 도움이 됩니다.