欢迎来到天天文库
浏览记录
ID:34724628
大小:74.18 KB
页数:6页
时间:2019-03-10
《mysql数据库中now函数的详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、MySQL目前不支持列的Default为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面就详细说明TIMESTAMP列类型: TIMESTAMP列类型TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。TIMESTAMP值显示尺寸的格式如下表所示:+---------------+----------------+
2、列类型
3、显示格式
4、
5、TIMESTAMP(14)
6、YYYYMMDDHHMMSS
7、
8、TIMESTAMP(12)
9、Y
10、YMMDDHHMMSS
11、
12、TIMESTAMP(10)
13、YYMMDDHHMM
14、
15、TIMESTAMP(8)
16、YYYYMMDD
17、
18、TIMESTAMP(6)
19、YYMMDD
20、
21、TIMESTAMP(4)
22、YYMM
23、
24、TIMESTAMP(2)
25、YY
26、+---------------+----------------+“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造最常见的显示尺寸是6、8、12、和14。你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0
27、或比14大均会被强制定义为列长14。列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。 定义字段长度 强制字段长度TIMESTAMP(0)-> TIMESTAMP(14)TIMESTAMP(15)-> TIMESTAMP(14)TIMESTAMP(1)-> TIMESTAMP(2)TIMESTAMP(5)-> TIMESTAMP(6) 所有的TIMESTAMP列都有同样的存储大小,使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。不合法的日期,将会被强制为0存储 这有几个含意:1、虽然你建表时定
28、义了列TIMESTAMP(8),但在你进行数据插入与更新时TIMESTAMP列实际上保存了14位的数据(包括年月日时分秒),只不过在你进行查询时MySQL返回给你的是8位的年月日数据。如果你使用ALTERTABLE拓宽一个狭窄的TIMESTAMP列,以前被“隐蔽”的信息将被显示。2、同样,缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。3、尽管TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();由于MySQL返回TIMESTAMP列的列值是进过格式
29、化后的检索的值,这意味着你可能不能使用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()),除非TIMESTAMP值的相关部分被包含在格式化的值中。例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上时,TIMESTAMP列的HH部分才会被显示,因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果。4、不合法TIMESTAMP值被变换到适当类型的“零”值(00000000000000)。(DATETIME,DATE亦然) 你可以使用下列语句来验证:CREATETABLE
30、test('id'INT(3)UNSIGNEDAUTO_INCREMENT,'date1'TIMESTAMP(8)PRIMARYKEY('id'));INSERTINTOtestSETid=1;SELECT*FROMtest;+----+----------------+
31、id
32、date1
33、+----+----------------+
34、 1
35、20021114
36、+----+----------------+ALTERTABLEtestCHANGE'date1''date1'TIMESTAMP(14);SELECT*F
37、ROMtest;+----+----------------+
38、id
39、date1
40、+----+----------------+
41、 1
42、20021114093723
43、+----+----------------+你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。自动更新第一个TIMESTAMP列在下列任何条件下发生: 1、列值没有明确地在一个INSERT或LOADDATAINFILE语句中指定。2、列值没有明确地在一个UP
44、DATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)3、你明确地设定TIMESTAMP列为NU
此文档下载收益归作者所有