当前位置: Oracle DBA培训网-优技培训 >> MySQL培训 > MySQL培训教程 >

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

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字节。

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙