MySql使用NOW()、CURDATE()函数导致的数据误删

一、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()函数作为条件时,会以天为比较单位,不会存在误删的操作。

实战总结:1、由于mysql的服务器和部署服务的服务器都是在内网中进行的,录入的时间可能会存在误差;

                   2、在用日期作为条件删除数据时,尽量用CURDATE()函数以天为单位作为条件,防止数据的误删;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容