MySQL中有5个函数需要计算当前时间的值:now(),sysdate(),curdate(),curtime(),unix_timestamp(); now()和sysdate()都是返回当前时间(形如 yyyy-mm-dd hh:mm:ss); curdate()返回当前时间的日期(形如 yyyy-mm-dd); curtime()返回当前时间(形如 hh:mm:ss) unix_timestam()返回当前时间的时间戳(形如 1464326059)
下面的sql是测试语句:
select now(),sysdate(),curdate(),curtime(),unix_timestamp();
下面是执行结果:
sysdate()和其他4个函数都是返回当前时间的相关信息,除了本身定义所返回的区别以外,sysdate()是返回执行这个函数的时间,其他4个函数返回语句开始执行时间。
sysdate()和now()返回格式相同,拿它们2个做比较体验一下上述说的区别: 下面是sql的测试语句:
select now(),sleep(2),now();select sysdate(),sleep(2),sysdate();
下面是执行结果:
可以发现now()2个时间是相同的,因为都是取的开始执行sql的时间; 而sysdate()的2个时间不同,因为取的是执行这个函数的时间,2个函数之间sleep了2秒,所以也就相差2秒了。
也正因为有这个区别,我们一般在执行语句的时候,都是用NOW(),因为SYSDATE获取当时实时的时间,这有可能导致主库和从库是执行的返回值是不一样的,导致主从数据不一致。