MySQL记录

前几天差点搞出来一个大飞机

,项目开发使用的MySQL数据库,其中有一张表使用的数据类型为timestamp日期类型,本来用的好好的,在测试的时候出现了一个BUG。

demo


如下面的SQL语句:


CREATE TABLE USER(
 user_id VARCHAR(10),
 user_name VARCHAR(20),
 birthday TIMESTAMP,
 create_time TIMESTAMP,
 modify_time TIMESTAMP
)

看起来好好的吧,但是当执行插入数据操作的时候,如:


INSERT INTO USER(user_id)
	VALUES('u001');


得到的结果是:



mysql关闭自动更新 mysql自动更新数据_timestamp


看到没有?我没有赋值啊,但是数据库默认给我添加了一个当前日期的值,这样不行啊!


自动赋值条件


你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。
如果你有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
   1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
   2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。
       (注意一个UPDATE设置一个列为它已经有的值, 这将不引起TIMESTAMP列被更新, 因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
   3、你明确地设定TIMESTAMP列为NULL.
   4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()


验证


1.insert的时候,在上面的demo已经被验证。



2.update的时候,执行SQL之前



mysql关闭自动更新 mysql自动更新数据_timestamp_02



UPDATE USER
	SET user_name = '更新'
	WHERE user_id = 'u001';

结果:



mysql关闭自动更新 mysql自动更新数据_mysql关闭自动更新_03



可以看到时间从00:04变成00:06,时间自动更新了。



3,设置为null的时候。


INSERT INTO USER(user_id,birthday)
	VALUES('u003',NULL);


mysql关闭自动更新 mysql自动更新数据_SQL_04



4.其他列测试


INSERT INTO USER(user_id,birthday,create_time,modify_time)
	VALUES('u004',NULL,NULL,NOW());


mysql关闭自动更新 mysql自动更新数据_自动更新_05


疑问


CREATE TABLE USER(
 user_id VARCHAR(10),
 user_name VARCHAR(20),
 birthday TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
 modify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)




mysql关闭自动更新 mysql自动更新数据_自动更新_06



数据库表结构查看:



mysql关闭自动更新 mysql自动更新数据_timestamp_07



我的MySQL版本:



mysql关闭自动更新 mysql自动更新数据_MySQL_08



*注:建议使用datatime类型