본문 바로가기

MySQL

MySQL :: 현재 시간을 저장하는 now() 함수 & sysdate() 와의 차이

가끔 테이블을 만들다보면, 튜플(데이터 행 이라고 이해하자) 이 만들어진 시간을 저장해야 할 경우가 있다. 예를 들어, 게시판에 글을 쓸 경우, 게시판이 써진 시간을 저장해야 하는 경우가 있다. 이 때 사용할 수 있는 것이 now() 함수 이다.


create table PostBox(

content varchar(150),

birth timestamp not null default now(),

)


위에서 처럼 default 값을 now() 로 주게 되면, 테이블의 값을 저장할 때마다 따로 birth 컬럼에 값을 입력하지 않고 null 을 입력할 경우, now() 값이 반환하는 현재 시간을 저장한다. 참고로 여기서, timestamp 타입으로 해줘야 한다. datetime 은 되지 않고 에러를 발생시킨다.



자 그럼, now() 와 sysdate() 의 차이는 무엇인가??


now() 는 쿼리문이 실행되는 시간의 값을 저장하고, sysdate() 는 해당 함수가 호출되는 순간의 시간을 저장한다. 


아래의 결과를 비교해 보라.


mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(2) | NOW()               |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:36 |        0 | 2006-04-12 13:47:36 |
+---------------------+----------+---------------------+

mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(2) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:44 |        0 | 2006-04-12 13:47:46 |
+---------------------+----------+---------------------+