中国唯一一家专业只做ARACLE认证和BDA实训的甲骨文金牌合作企业

网络授课

技术沙龙

MySQL培训课程:timestamp自动记录数据的改变时间

MySQL培训课程:timestamp自动记录数据的改变时间,timestamp列类型提供一种类型,timestamp值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个timestamp列,只有第一个自动更新。

自动更新第一个timestamp列在下列任何条件下发生:

`列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。

` 列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起timestamp列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)

`你明确地设定timestamp列为NULL.

除第一个以外的timestamp列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

例如,创建如下的表:

MySQL> CREATE TABLE student

-> (

-> id int,

-> name char(16),

-> english tinyint,

-> chinese tinyint,

-> history tinyint,

-> time timestamp

-> );

向表中插入记录,可以查看效果:

MySQL> INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);

查看记录的存储情况:

MySQL> SELECT * FROM student;

+------+---------+---------+---------+---------+----------------+

| id | name | english | chinese | history | time |

+------+---------+---------+---------+---------+----------------+

| 11 | Tom | 66 | 93 | 67 | 20010220123335 |

+------+---------+---------+---------+---------+----------------+

你可以看到time列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:

MySQL> UPDATE student SET english=76 WHERE id=11;

MySQL> SELECT * FROM student;

+------+------+---------+---------+---------+----------------+

| id | name | english | chinese | history | time |

+------+------+---------+---------+---------+----------------+

| 11 | Tom | 76 | 93 | 67 | 20010220125736 |

+------+------+---------+---------+---------+----------------+

可以清楚的看到,time列的时间被自动更改为修改记录的时间。

有时候你希望不更改任何值,也能打到修改timestamp列的值,这时只要设置该列的值为NULL,MySQL就可以自动更新timestamp列的值:

MySQL> UPDATE student SET time=NULL WHERE id=11;

MySQL> select * from student where id=11;

+------+------+---------+---------+---------+----------------+

| id | name | english | chinese | history | time |

+------+------+---------+---------+---------+----------------+

| 11 | Tom | 76 | 93 | 67 | 20010220130517 |

+------+------+---------+---------+---------+----------------+

通过明确地设置希望的值,你可以设置任何timestamp列为不同于当前日期和时间的值,即使对第一个timestamp列也是这样。例如,如果,当你创建一个行时,你想要一个timestamp被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:

`让MySQL在行被创建时设置列,这将初始化它为当前的日期和时间。

`当你执行随后的对该行中其他列的更改时,明确设定timestamp列为它的当前值。

例如,当你在修改列时,可以把原有的值付给timestamp列:

MySQL> UPDATE student SET english=66,time=time WHERE id=11;

MySQL> select * from student where id=11;

+------+------+---------+---------+---------+----------------+

| id | name | english | chinese | history | time |

+------+------+---------+---------+---------+----------------+

| 11 | Tom | 66 | 93 | 67 | 20010220130517 |

+------+------+---------+---------+---------+----------------+

另一方面,你可能发现,当你想要实现上面这个效果时,很容易用一个你用NOW()初始化的DATETIME列然后不再改变它,这样也许直接些。 但是,timestamp列的以后好处是存储要求比较小,节省空间。timestamp的存储需求是4字节,而DATETIME列的存储需求是8字节。

CUUG 优技培训

中国Oracle培训领航专家

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。

金牌讲师

行业资深实战专家 让学习就像在就业
展开

实操环境

让每一个DBA课程学员有真正的实操练习

让每一个DBA课程学员有真正的实操练习

让每一个DBA课程学员有真正的实操练习

让每一个DBA课程学员有真正的实操练习

院校合作

学校新闻

行业新闻

在线预约 抢先报名 获取课程排期

请输入您的手机号

申请试听
版权所有:北京神脑资讯科技有限公司
地址:北京市海淀区紫竹花园4号楼D座703
全国免费咨询电话:400-0909-964
电话:010-59426307 ,邮政编码:100089
E-mail:cuug_bj@cuug.com
拨打电话
在线咨询
首页