关于在SQL语句中记录添加时间和修改时间的简单用法:invalid default value for create_time

版权声明: https://blog.csdn.net/linmengmeng_1314/article/details/81269576

最近看到别人的项目中,数据库中加入了创建时间和修改时间,感觉这个挺实用,就想创建一个demo试试怎么用,查询之后发现修改时间使用的是timestamp字段格式,数据库会根据当前时间,自动处理,不需要在SQL语句中设置,创建时间为datetime,默认值是CURRENT_TIMESTAMP,使用时直接在SQL语句中使用now()来获取当前的时间,但是动手之后,问题就来了!!!!

首先是在创建数据库字段的时候就报错了,使用的是MySQL,工具用的Navicat,但是,设置create_time字段为datetime,默认值为CURRENT_TIMESTAMP保存时就提示invalid default value for create_time的错误,反复查询之后,无果。。。。。。。。。。。
我按照别人的博客里面的截图直接在Navicat里面手动设置相同的字段和默认类型,还是报这个错误。。。。。。。wtf??????

这是别人设置的:
这里写图片描述

这是我的设置:
这里写图片描述
这里写图片描述
保存就提示:
这里写图片描述
折腾了半天,查到说是MySQL 5.6以后timestamp设定默认值规则改变,不能为”0000 00-00 00:00:00”,但是现在我并没有插入值,只是创建数据库字段,这里就通过不了了 还谈什么后期插入新的数据呢。。。。。。。。

在查了将近一个小时的时间里 很多博客都说修改一下数据库默认设置的时间不能为零,我感觉这个根本无关痛痒,我也没有尝试。。。。。。

最后偶然在一个博客下面看到一句总结:

timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。(如果需要可以设置timestamp不自动更新)

然后想出来一个笨方法:

设置的字段如下图所示:

这里写图片描述
因为创建时间是固定的,修改的时间是跟随系统更新的,所以将create_time字段类型设置为varchar,创建新数据时,为这个字段赋值,直接使用now(),取值,插入到create_time 里面即可。将update_time 设置为timestamp,并勾选根据当前时间戳更新,
既然now(),可以获取到当前时间,那么可以尝试将create_time 类型设置为字符串,然后 在执行insert语句的时候,在添加的SQL语句中的字段里面加上create_time,value为now(), 这样就可以在数据库中插入添加的时间了

比如现在往数据库添加一条新的数据:insert into user ( username, password, create_time ) VALUES ('小明22', '12345', now())
这里写图片描述

这里create_time和update_time都是当前时间,但是不同的是 create_time的时间是使用now()获取到的当前系统时间,然后使用SQL语句,赋值给create_time的,而update_time 是系统自动赋值的,不需要在SQL语句中具体操作的。

执行修改的操作后,update_time 会自动更新为修改的时间

执行语句update user set username = '小明32' where id = 32之后,create_time 仍然为创建时的时间,而update_time自动更新为新的时间
这里写图片描述

总结:由于创建的时间是固定的,可以设置create_time字段的属性为varchar,在创建时,在SQL语句中使用now(),来为create_time字段赋值。
updae_time的属性设置为timestamp,并勾选根据时间戳更新,这样在执行update语句时,会自动更新修改的时间。

小白一个,各位如果有更好地方法,欢迎指教。

猜你喜欢

转载自blog.csdn.net/linmengmeng_1314/article/details/81269576
今日推荐