首页 > 编程知识 正文

mysqldate类型索引失效,mysql date类型为空

时间:2023-05-05 09:28:08 阅读:271761 作者:2987

一、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()函数以天为单位作为条件,防止数据的误删;

快三大小单双稳赚买法器跟部署服务的服务器存在时间差,假如以某天的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()函数以天为单位作为条件,防止数据的误删;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。