一、NOW()、CURDATE()函数介绍
SELECT CURDATE()查出的日期格式不带时分秒、只有日期;
SELECT NOW()查出的日期格式日期+时分秒;
二、实战使用NOW()、CURDATE()函数误删数据介绍
列:需求:定时任务删除先根据pubdate(推送日期)删除7天以前的数据,后录入昨天的数据(同一个方法中执行):
数据源:
生产环境mysql跟服务不在同一台服务器上,并且对应的服务器只有内网可以访问,导致时间不能联网,可能有时间差;
如下sql执行使用NOW():
delete from BAIDUPROD where pubdate < DATE_SUB(NOW(),INTERVAL 7 day),由于部署mysql的服务器跟部署服务的服务器存在时间差,假如以某天的1点为界限,服务部署的服务器1点整了,服务发送sql到mysql的服务器执行,此时mysql的服务器还没1点整,可能只有59分50多秒,进行了数据录入;因为删除的代码在插入的代码之前执行,在执行删除sql的时候,使用NOW()会把时分秒带入到sql进行比较,因此可能下一天的前一点点数据会符合比较条件,进行删除。
如下sql执行使用CURDATE():
delete from BAIDUPROD where pubdate < DATE_SUB(CURDATE(),INTERVAL 7 day),使用CURDATE()函数作为条件时,会以天为比较单位,不会存在误删的操作。