MYSQL中怎样设列的默认值为Now的介绍

上传人:平*** 文档编号:11203468 上传时间:2017-10-12 格式:DOC 页数:5 大小:93.17KB
返回 下载 相关 举报
MYSQL中怎样设列的默认值为Now的介绍_第1页
第1页 / 共5页
MYSQL中怎样设列的默认值为Now的介绍_第2页
第2页 / 共5页
MYSQL中怎样设列的默认值为Now的介绍_第3页
第3页 / 共5页
MYSQL中怎样设列的默认值为Now的介绍_第4页
第4页 / 共5页
MYSQL中怎样设列的默认值为Now的介绍_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《MYSQL中怎样设列的默认值为Now的介绍》由会员分享,可在线阅读,更多相关《MYSQL中怎样设列的默认值为Now的介绍(5页珍藏版)》请在金锄头文库上搜索。

1、MYSQL中怎样设列的默认值为 Now()的介绍MySQL目前不支持列的 Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用 TIMESTAMP列类型下面就详细说明 TIMESTAMP列类型TIMESTAMP 列类型TIMESTAMP 值可以从 1970的某时的开始一直到 2037年,精度为一秒,其值作为数字显示。TIMESTAMP 值显示尺寸的格式如下表所示:+-+-+| 列类型| 显示格式 | TIMESTAMP(14) | YYYYMMDDHHMMSS | TIMESTAMP(12) | YYMMDDHHMMSS | TIMESTAMP(10) |

2、YYMMDDHHMM | TIMESTAMP(8)| YYYYMMDD | TIMESTAMP(6)| YYMMDD | TIMESTAMP(4)| YYMM | TIMESTAMP(2)| YY |+-+-+“完整”TIMESTAMP 格式是 14位,但 TIMESTAMP列也可以用更短的显示尺寸创造最常见的显示尺寸是 6、8、12、和 14。你可以在创建表时指定一个任意的显示尺寸,但是定义列长为 0或比 14大均会被强制定义为列长 14。列长在从 113 范围的奇数值尺寸均被强制为下一个更大的偶数。列如:定义字段长度 强制字段长度TIMESTAMP(0) -TIMESTAMP(14)TIM

3、ESTAMP(15)-TIMESTAMP(14)TIMESTAMP(1) -TIMESTAMP(2)TIMESTAMP(5) -TIMESTAMP(6)所有的 TIMESTAMP列都有同样的存储大小,使用被指定的时期时间值的完整精度(14 位)存储合法的值不考虑显示尺寸。不合法的日期,将会被强制为 0存储这有几个含意: 1、虽然你建表时定义了列 TIMESTAMP(8),但在你进行数据插入与更新时TIMESTAMP列实际上保存了 14位的数据(包括年月日时分 秒),只不过在你进行查询时 MySQL返回给你的是 8位的年月日数据。如果你使用 ALTER TABLE拓宽一个狭窄的 TIMESTAM

4、P列,以前被“隐蔽”的信息将被显示。 2、同样,缩小一个 TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。 3、尽管 TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();由于 MySQL返回 TIMESTAMP 列的列值是进过格式化后的检索的值,这意味着你可能不能使用某些函数来操作 TIMESTAMP列(例如 HOUR()或 SECOND ()),除非 TIMESTAMP值的相关部分被包含在格式化的值中。例如,一个 TIMESTAMP列只有被定义为 TIMESTAMP(10)以上时, TIMESTAMP 列的 HH部

5、分才会被显示,因此在更短的 TIMESTAMP值上使用 HOUR()会产生一个不可预知的结果。4、不合法 TIMESTAMP值被变换到适当类型的“零”值(00000000000000)。(DATETIME,DATE 亦然)你可以使用下列语句来验证:CREATE TABLE test (id INT (3) UNSIGNED AUTO_INCREMENT, date1 TIMESTAMP (8) PRIMARY KEY(id);INSERT INTO test SET id = 1;SELECT * FROM test;+-+-+| id | date1|+-+-+|1 | 20021114 |

6、+-+-+ALTER TABLE test CHANGE date1 date1 TIMESTAMP(14);SELECT * FROM test;+-+-+| id | date1|+-+-+|1 | 20021114093723 |+-+-+你可以使用 TIMESTAMP列类型自动地用当前的日期和时间标记 INSERT或UPDATE的操作。如果你有多个 TIMESTAMP列,只有第一个自动更新。 自动更新第一个 TIMESTAMP列在下列任何条件下发生: 1、列值没有明确地在一个 INSERT或 LOAD DATA INFILE语句中指定。 2、列值没有明确地在一个 UPDATE语句中指定

7、且另外一些的列改变值。(注意一个 UPDATE设置一个列为它已经有的值,这将不引起 TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL 为了效率而忽略更改。) 3、你明确地设定 TIMESTAMP列为 NULL. 4、除第一个以外的 TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为 NULL,或 NOW()。CREATE TABLE test (id INT (3) UNSIGNED AUTO_INCREMENT, date1 TIMESTAMP (14),date2 TIMESTAMP (14),PRIMARY KEY(id);INSERT INTO te

8、st (id, date1, date2) VALUES (1, NULL, NULL);INSERT INTO test SET id= 2;+-+-+-+| id | date1| date2|+-+-+-+|1 | 20021114093723 | 20021114093723 |2 | 20021114093724 | 00000000000000 |+-+-+-+-第一条指令因设 date1、date2 为 NULL,所以 date1、date2 值均为当前时间第二条指令因没有设 date1、date2 列值,第一个 TIMESTAMP列 date1为更新为当前时间,而二个 TIME

9、STAMP列 date2因日期不合法而变为“00000000000000”UPDATE test SET id= 3 WHERE id=1;+-+-+-+| id | date1| date2|+-+-+-+|3 | 20021114094009 | 20021114093723 |2 | 20021114093724 | 00000000000000 |+-+-+-+-这条指令没有明确地设定 date2的列值,所以第一个 TIMESTAMP列date1将被更新为当前时间UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3;+-+-+

10、-+| id | date1| date2|+-+-+-+|1 | 20021114094009 | 20021114094320 |2 | 20021114093724 | 00000000000000 |+-+-+-+-这条指令因设定 date1=date1,所以在更新数据时 date1列值并不会发生改变而因设定 date2=NOW(),所以在更新数据时 date2列值会被更新为当前时间此指令等效为 UPDATE test SET id= 1,date1=date1,date2=NULL WHERE id=3;因 MySQL返回的 TIMESTAMP 列为数字显示形式,你可以用 DATE_

11、FROMAT()函数来格式化 TIMESTAMP 列SELECT id,DATE_FORMAT(date1,%Y-%m-%d %H:%i:%s) As date1,DATE_FORMAT(date2,%Y-%m-%d %H:%i:%s) As date2 FROM test;+-+-+-+| id | date1 | date2 |+-+-+-+|1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |+-+-+-+SELECT id,DATE_FORMAT(da

12、te1,%Y-%m-%d) As date1,DATE_FORMAT(date2,%Y-%m-%d) As date2 FROM test;+-+-+-+| id | date1 | date2 |+-+-+-+|1 | 2002-11-14| 2002-11-14|2 | 2002-11-14| 0000-00-00|+-+-+-+在某种程度上,你可以把一种日期类型的值赋给一个不同的日期类型的对象。然而,而尤其注意的是:值有可能发生一些改变或信息的损失: 1、如果你将一个 DATE值赋给一个 DATETIME或 TIMESTAMP对象,结果值的时间部分被设置为00:00:00,因为 DATE

13、值中不包含有时间信息。 2、如果你将一个 DATETIME或 TIMESTAMP值赋给一个 DATE对象,结果值的时间部分被删除,因为 DATE类型不存储时间信息。 3、尽管 DATETIME, DATE和 TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的值范围。例如,TIMESTAMP 值不能比 1970早,也不能比 2037晚,这意味着,一个日期例如1968-01-01,当作为一个 DATETIME或 DATE值时它是合法的,但它不是一个正确 TIMESTAMP值!并且如果将这样的一个对象赋值给TIMESTAMP列,它将被变换为 0。 当指定日期值时,当心某些缺陷: 1、允许作为字符串指定值的宽松格式能被欺骗。例如,因为“:”分隔符的使用,值10:11:12可能看起来像时间值,但是如果在一个日期中使 用,上下文将作为年份被解释成2010-11-12。值10:45:15将被变换到0000-00-00,因为45不是一个合法的月份。 2、以 2位数字指定的年值是模糊的,因为世纪是未知的。MySQL 使用下列规则解释 2位年值: 在 00-69范围的年值被变换到 2000-2069。 在范围

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号