MySQL培训课程:timestamp自动记录数据的改变时间
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询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字节。