mysql中TIMESTAMP的作用是什么

分类:编程技术 时间:2024-02-20 15:28 浏览:0 评论:0
0
本文向您展示 TIMESTAMP 在 mysql 中的作用。内容简洁易懂。绝对会让你眼前一亮。希望您能从本文的详细介绍中有所收获。


TIMESTAMP 的变体
1. TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
创建新记录和修改现有记录时刷新此数据列
/>
2. TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建新记录时,将此
字段设置为当前时间,但以后修改时,不会刷新

3. TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 创建新记录时将此字段设置为 0,
稍后修改时刷新它 www.2cto.com

4、TIMESTAMP DEFAULT 'yyyy-mm-dd hh : mm:ss' ON UPDATE CURRENT_TIMESTAMP
创建新记录时将此字段设置为给定值,稍后修改时刷新它
MySQL目前不支持该字段的默认值e 列以函数的形式。如果达到这个列的默认值是当前更新日期
时间的函数,可以使用TIMESTAMP列类型。以下是 TIMESTAMP 列类型的详细说明

*TIMESTAMP 列类型*
TIMESTAMP 值 该值可以显示为从 1970 年的某个时间到 2037 年的数字精确度为一秒。
TIMESTAMP值显示大小的格式如下表:
:
+---------------+---- ----- ------+
|栏目类型|显示格式|
|时间戳(14) | YYYYMMDDDHHMMSS | 10)| YYMMDDHHMM|
|时间戳(8):| YYYYMMDD: |
|时间戳(6)|年月日   |
|时间戳(4)| YYMM   |
|时间戳(2)| -----+----------------+
“完整”TIMESTAMP 格式是 14 位,但 TIMESTAMP 列也可以使用更短的显示尺寸
最常见的显示尺寸是 6、8、12 和 14。
您可以指定任意显示尺寸e 创建表时,但定义列长度为 0 或大于 14 将强制定义列长度为 14。
范围从 1 到 13 的奇值列大小将强制为下一个更大的偶数。

*例如:*
定义字段长度并强制字段长度
TIMESTAMP(0) ->TIMESTAMP(14)
TIMESTAMP(15)->TIMESTAMP( 14 )
TIMESTAMP(1) ->TIMESTAMP(2)
TIMESTAMP(5) ->TIMESTAMP(6)

所有TIMESTAMP列的存储大小相同,使用完整的指定纪元时间值的精度(14 位)存储合法值,无论显示大小如何。非法日期将被强制存储为 0
* 这有几个含义: * www.2cto.com
1。虽然你在建表时定义了TIMESTAMP(8)列,当你插入和更新数据时,TIMESTAMP列实际上存储的是14位数据(包括年、月、日、时、分、秒),但是当你执行查询,MySQL返回8位数据给你
Year, mont小时和日数据。如果您使用 ALTER TABLE 来加宽狭窄的 TIMESTAMP 列,则先前“隐藏”的信息将被显示。
2.同样,减少 TIMESTAMP 列也不会导致信息丢失,只不过在显示该值时,
显示的信息较少。
3.虽然TIMESTAMP值是以全精度存储的,但直接对存储值进行操作的唯一函数是UNIX_TIMESTAMP();
由于MySQL返回的TIMESTAMP列的列值是格式化后检索到的值,这意味着您可能无法在 TIMESTAMP 列上使用某些函数(例如 HOUR() 或 SECOND()),除非 TIM ESTAMP 值的相关部分包含在格式化值中。
例如,TIMESTAMP 列仅在定义为 TIMESTAMP(10) 或以上时才会显示,
因此在较短的 TIMESTAMP 值上使用 HOUR() 将产生无效的可预测结果。
4.非法的 TIMESTAMP 值被转换d 为适当类型的“零”值 (00000000000000)。 (DATETIME、DATE同理)
*可以使用以下语句来验证:*
CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCRMENT, 'date1'
TIMESTAMP (8 ) PRIMARY KEY('id'));
INSERT INTO test SET id = 1;
SELECT * FROM test;
+----+--------- - ------+
|编号 |日期1:|
+----+----------------+
|1 | 20021114:
+----+----------------+
ALTER TABLE 测试 CHANGE 'date1' 'date1' TIMESTAMP(14);
从测试中选择 *;
+----+----------------+
|编号 |日期1  |
+-- --+----------------+
| 1 | 20021114093723 |
+----+----------- -----+

您可以使用 TIMESTAMP 列类型自动标记 INSERT 或 UPDATE使用当前日期和时间进行操作。
如果您有多个 TIMESTAMP 列,则只有第一个会自动更新。在以下任何条件下都会自动更新第一个 TIMESTAMP 列:
1.列值不明确在 INSERT 或 LOAD DATA INFILE 语句中明确指定。
2.在 UPDATE 语句中未显式指定列值并且其他列更改值。 (请注意,UPDATE
将列设置为已经有值,这不会导致 TIMESTAMP 列被更新,因为如果将列设置为其当前值,MySQL 会为了效率而忽略更改。)
3.您将 TIMESTAMP 列显式设置为 NULL。
4.除第一个之外的 TIMESTAMP 列也可以设置为当前日期和时间,只要将该列设置为 NULL 或 NOW()。
CREATE TABLE 测试 ( www.2cto.com
'id' INT (3) UNSIGNED AUTO_INCRMENT,
'date1' TIMESTAMP (14),
'date2' TIMESTAMP (14) ,
PRIMARY KEY('id')
);


INSERT INTO test(id,date1,date2)VALUES(1,NULL,NULL);
INSERT INTO 测试集 id= 2;
+----------------+----------------+---------------- +
|编号 |日期1  ||日期2  |
+----+----------------+------------------------ -----+< br/>| 1 | 20021114093723| 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+------------ ----+----------------+
->第一条指令将date1和date2设置为NULL,因此date1和date2的值都是当前时间和日期。两条指令
因为date1和date2列值没有设置,所以第一个TIMESTAMP列date1更新为当前时间
第二个TIMESTAMP列date2变成“00000000000000”,因为日期不合法
/ />更新测试集 id= 3 WHERE id=1;
+----+----------------+-------- - ------+
|编号 |日期1:|日期2:|
+----+----------------+----------------+
| 3 | 20021114094009 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+-------- --------+
->该命令没有显式设置date2的列值,因此第一个TIMESTAMP列date1将被更新为当前时间

UPDATE test SET id= 1,date1=date1,date2=NOW( ) 其中 id=3; www.2cto.com
+----+-------------------------+----------------+
|编号 |日期1  |日期2  |
+----+------------ ------+----------------+
| 1 | 20021114094009 | 20021114094320 |
| 2 | 20021114093724 | 00000000000000 |
+----------------+----------------+----------------+
->这条命令是Set date1=date1,所以当数据更新时,date1列的值不会改变。
因为设置了date2=NOW(),所以当数据更新时,date2列的值会更新为当前时间数据已更新。这个命令等效果是
UPDATE test SET id= 1,date1=date1,date2=NULL WHERE id=3;
因为MySQL返回的TIMESTAMP列是数字显示形式,所以可以使用 DATE_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;
+----+-------------- -------+--------------------+
|编号 |日期1:日期2
+----+----- ---------------+----------------- ----+
| 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 |
+ ----+------------------------+------- --------------+< br/>
SELECT id,DATE_FORMAT(date1,'%Y-%m-%d') As date1,
DATE_FORMAT( date2,'%Y-%m-%d') As date2 FROM test;
www.2cto.com
+----+------------ +-------------+
|编号 |日期1:日期2
+----+-------------+------------+
| 1 | 2002年11月14日| 2002年11月14日:|
| 2 | 2002年11月14日| 0000-00-00:|
+----+---- ---------+-------------+

在某种程度上,您可以将日期类型值分配给不同日期类型的对象。
但是,特别需要注意的是,该值可能会发生一些变化或信息丢失:

1.如果将 DATE 值分配给 DATETIME 或 TIMESTAMP 对象,则结果值会将时间部分
设置为“00:00:00”,因为 DATE 值不包含时间信息。 ​
2.如果将 DATETIME 或 TIMESTAMP 值分配给 DATE 对象,则该对象的时间部分结果值被删除,
因为DATE类型不存储时间信息。
3.尽管DATETIME、DATE和TIMESTAMP值都可以使用相同的格式集来指定,
并非所有类型都具有相同的值范围。
例如,TIMESTAMP 值不能早于 1970 年或晚于 2037 年,这意味着“1968-01-01”等日期用作 DATETIME 或 DATE 值时是合法的。 ,但这不是正确的 TIMESTAMP 值!
如果将这样的对象分配给 TIMESTAMP 列,它将转换为 0。 www.2cto.com

*指定日期值时,请注意某些陷阱:*

1.允许将值指定为字符串的宽松格式可能会被欺骗。例如,由于使用了“:”分隔符,值“10:11:12”可能看起来像一个时间值,但如果在日期内使用,上下文将被解释为年份“2010-11-” 12'。值“10:45:15”将转换为“0000-00-00”,因为“45”不是合法的月。

2.用 2 位数字指定的年份值不明确,因为世纪未知。 MySQL 使用以下规则来解释 2 位年份值:
00-69 范围内的年份值将转换为 2000-2069。 70-99 范围内的年份值转换为 1970-1999。

以上内容就是mysql中TIMESTAMP的作用是什么。你学到了知识或技能了吗?如果您想学习更多技能或者丰富自己的知识库,请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > mysql中TIMESTAMP的作用是什么

用户评论