时间戳timestamp类型

时间戳timestamp类型

Timestamp

​ Mysql中timestamp的格式为"YYYY-MM-DD:HH-MM-SS",显示宽度是19个字符,如果你在insert的时候指定(null),那么它会自动显示为当前操作的时间。但是如果你在insert操作的时候没有插入数据,那么默认为0000-00-00 00-00-00,TIMESTAMP 类型使用 4 个字节,范围是 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ 。


mysql> insert into test values(null);
Query OK, 1 row affected

mysql> select * from test;
+---------------------+
| time                |
+---------------------+
| 2018-12-27 12:31:36 |
+---------------------+
1 row in set

​ 当你每次insert和update操作的时候,会自动记录当前操作的时间。如果你不想要时间这个格式,可以将其转换为数字具体操作为select的时候在列的名字后面添加+0

mysql> update test set name='王五' where id=1;
Query OK, 1 row affected
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test;
+---------------------+----+------+------+
| time                | id | name | eee  |
+---------------------+----+------+------+
| 2018-12-27 12:50:37 |  1 | 王五 | NULL |
| 2018-12-27 12:32:04 |  2 |      | NULL |
| 2018-12-27 12:44:59 |  3 | 张三 | NULL |
| 2018-12-27 12:44:59 |  4 | 李四 | NULL |
+---------------------+----+------+------+

//数字转换
mysql> select time+0 from test;
+----------------+
| time+0         |
+----------------+
| 20181227123136 |
| 20181227123204 |
+----------------+
2 rows in set

如果定义时 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 子句都有,列值为默认使用当前的时间戳,并且自动更新

CREATE TABLE  tb1( 
    id   INTEGER,
    t1   TIMESTAMP DEFAULT CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP
 );


mysql> DESC tb1;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | int(11)   | YES  |     | NULL              |                             |
| t1    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)


mysql> INSERT INTO tb1(id) values(1);
Query OK, 1 row affected (0.10 sec)

mysql> select * from tb1;
+------+---------------------+
| id   | t1                  |
+------+---------------------+
|    1 | 2017-08-30 12:07:00 |
+------+---------------------+
1 row in set (0.00 sec)


mysql> UPDATE tb1 SET id=2 WHERE id=1;
Query OK, 1 row affected (0.20 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from tb1;
+------+---------------------+
| id   | t1                  |
+------+---------------------+
|    2 | 2017-08-30 12:07:55 |
+------+---------------------+
1 row in set (0.00 sec)

如果不使用 DEFAULT 或 ON UPDATE 子句,那么它等同于 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

CREATE TABLE  tb2( 
        id   INTEGER,
        t1    TIMESTAMP
);

mysql> DESC tb2;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | int(11)   | YES  |     | NULL              |                             |
| t1    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)

如果只有 DEFAULT CURRENT_TIMESTAMP 子句,而没有 ON UPDATE 子句,列值默认为当前时间戳但不自动更新

 CREATE TABLE  tb3( 
        id   INTEGER,
        t1    TIMESTAMP  DEFAULT CURRENT_TIMESTAMP
);

mysql> DESC tb3;
+-------+-----------+------+-----+-------------------+-------+
| Field | Type      | Null | Key | Default           | Extra |
+-------+-----------+------+-----+-------------------+-------+
| id    | int(11)   | YES  |     | NULL              |       |
| t1    | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
+-------+-----------+------+-----+-------------------+-------+

**注意:**当你在需要在表中添加类型为timestamp列的时候,如果你没有指定default current_timestamp on update current_timstamp的时候,这时这个列的默认值是0000-00-00 00-00-00;

mysql> alter table test add t timestamp;
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+------------+------+-----+---------------------+-----------------------------+
| Field | Type       | Null | Key | Default             | Extra                       |
+-------+------------+------+-----+---------------------+-----------------------------+
| t     | timestamp  | NO   |     | 0000-00-00 00:00:00 |                             |
+-------+------------+------+-----+---------------------+-----------------------------+

总结:

  1. 占用4个字节
  2. 允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
  3. TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如’1968-01-01’,虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。
  4. 默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。
  5. 数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
  6. 默认情况下以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
  7. 如果需要可以设置timestamp不自动更新。通过设置DEFAULT CURRENT_TIMESTAMP 可以实现。

作者:risen16
来源:CSDN
原文:https://blog.csdn.net/risen16/article/details/77875923
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_38238296/article/details/86250925