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

MySQL NOW()와 SYSDATE() 함수의 차이점 완벽 정리

MySQL에서 NOW() 함수와 SYSDATE() 함수는 모두 현재 타임스탬프 값을 반환합니다. 하지만 두 함수의 출력 결과는 실행 시점에 따라 달라지며, 바로 이 점이 두 함수 사이의 가장 큰 차이를 만듭니다.

NOW() 함수의 특징

NOW() 함수는 해당 문장(쿼리)이 실행을 시작한 시점의 시간을 일정하게 유지하며 반환합니다. 즉, 쿼리 실행 도중에 시간이 얼마나 흘렀더라도 항상 동일한 시작 시각을 돌려줍니다.

SYSDATE() 함수의 특징

반면 SYSDATE() 함수는 해당 문장이 실제로 실행되는 정확한 시점의 시간을 반환합니다. 쿼리가 진행되는 동안 시간이 지나면 그만큼 반영된 값이 출력됩니다.

예제로 확인하는 차이점

다음 예제를 통해 두 함수의 차이를 명확히 확인할 수 있습니다.

NOW() 함수 예제

mysql> Select NOW(), SLEEP(5), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(5) | NOW()               |
+---------------------+----------+---------------------+
| 2017-10-31 09:57:36 | 0        | 2017-10-31 09:57:36 |
+---------------------+----------+---------------------+
1 row in set (5.11 sec)

위 쿼리는 시스템을 5초간 대기(SLEEP)시킨 후에도 NOW() 함수가 동일한 값을 반환하는 것을 보여줍니다. 이는 NOW()가 쿼리 실행이 시작된 시점의 시간을 기준으로 하기 때문입니다.

SYSDATE() 함수 예제

mysql> Select SYSDATE(), SLEEP(5), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(5) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2017-10-31 09:58:13 | 0        | 2017-10-31 09:58:18 |
+---------------------+----------+---------------------+
1 row in set (5.00 sec)

반면 위 쿼리에서 SYSDATE() 함수는 5초 대기 후 반환된 값이 실제로 정확히 5초 증가한 것을 확인할 수 있습니다. 이는 SYSDATE()가 호출되는 실제 실행 시점의 시간을 기준으로 하기 때문입니다.

정리

  • NOW(): 쿼리 문장이 실행을 시작한 시점의 시간을 고정적으로 반환
  • SYSDATE(): 함수가 실제로 실행되는 순간의 시간을 매번 새로 반환

따라서 쿼리 실행 도중 시간 경과에 따른 정확한 현재 시각이 필요하다면 SYSDATE()를, 문장 시작 시점을 기준으로 한 일관된 시간 값이 필요하다면 NOW()를 사용하는 것이 적합합니다.