MySQL中多个时间戳设置的解释
时间戳设置自动更新的表的更改更新current_timestamp
但由于
最多一个表只能有一个字段设置current_timestamp
它是不可能在两线设置默认的current_timestamp。
还有一件事要注意
复制代码代码如下所示:
创建表(设备)
` ID ` int(10)符号的非空auto_increment,
`告诉` int(10)符号的非空的默认'0'comment'toid,
`时间创造创造时间`时间零评论,
`更新时间戳不`零违约current_timestamp评论最后更新时间,
主键(id),
唯一索引`告诉`(`告诉`)
)
评论=装置表
整理= 'utf8_general_ci
InnoDB引擎=;
它不象这样工作。
原因是,MySQL将默认表中第一时间戳字段(设置非空)隐式设置,该设置defaulat current_timestamp.so无异于设置了两current_timestamp。
需求分析
在表中,有两个领域,创造时间和更新。
1插入时,不设置两个字段并将其设置为当前时间。
2更新时,在SQL两方面没有设置和更新将改变当前时间
这样的要求是不可能的事。因为你不能避免两字段设置current_timestamp
有几种解决方案:
1使用触发器
插入和更新触发时触发时间设置。
互联网上的人们使用这种方法,当然,这种方法的可用性是毋庸置疑的,但对于实际场景来说,解决小问题和增加复杂性无疑是无疑的。
2将第一个时间戳的缺省值设置为0
表结构如下:
复制代码代码如下所示:
创建表(设备)
` ID ` int(10)符号的非空auto_increment,
`告诉` int(10)符号的非空的默认'0'comment'toid,
`时间创造创造时间`时间零违约0评论,
`更新时间戳不`零违约current_timestamp更新current_timestamp评论最后更新时间,
主键(id),
唯一索引`告诉`(`告诉`)
)
评论=装置表
整理= 'utf8_general_ci
InnoDB引擎=;
通过这种方式,您需要的插入和更新操作将更改为:
插入装置告诉= 11,创造时间= null;
更新设备设置告诉= 22,ID = 1;
值得注意的是这里的创造时间插入必须设置为null!
虽然我认为这个方法很糟糕,但它只需要修改插入操作来减少SQL语句,这是值得修改的,这确实是一种修改最小数据库并保证需求的方法,当然,这种方法也可以与1种方法同时使用,这样可以减少写触发器的次数。
3个古老而诚实的真实SQL语句使用时间戳。
这是大多数人和最经常选择的。
表格结构上的设计不多:
复制代码代码如下所示:
创建表(设备)
` ID ` int(10)符号的非空auto_increment,
`告诉` int(10)符号的非空的默认'0'comment'toid,
`时间创造创造时间`时间零违约current_timestamp评论,
`更新时间戳不`零评论的最后更新时间,
主键(id),
唯一索引`告诉`(`告诉`)
)
评论=装置表
整理= 'utf8_general_ci
InnoDB引擎=;
在这种方式中,你需要写具体的时间戳,当插入和更新操作。
插入装置告诉= 11,创造时间= '2012-11-2 10:10:10 ',最后更新时间= '2012-11-2 10:10:10
更新设备设置告诉= 22,最后更新时间= '2012-11-2 10:10:10'where ID = 1
事实上,想想看,也有这样的优点:current_timestamp是MySQL特定的,当数据库从MySQL数据库、业务逻辑代码没有被修改。
西蒙兹:这三种方法的选择完全取决于你自己的考虑。顺便说一下,最后,我仍然选择第三种方法。