TIMESTAMP 类型仅仅是为了兼容SQL 标准,
因此,
不建议使用者在实际的项目应
用场景使用此数据类型,推荐使用DATETIME 数据类型。
TIMESTAMP 的格式为“YYYY-MM-DD HH:MI:SS”,支持的范围是“1970-01-01
08:00:01”到“2038-01-01 00:59:59”。
gbase> CREATE TABLE t (a int,b timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP, c timestamp DEFAULT '2013-01-01 00:00:01');
Query OK, 0 rows affected
gbase> SHOW CREATE TABLE t;
+-------+----------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------+
| t | CREATE TABLE "t" (
"a" int(11) DEFAULT NULL,
"b" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
"c" timestamp NOT NULL DEFAULT '2013-01-01 00:00:01'
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+-------+----------------------------------------------------------------+
1 row in set
TIMESTAMP 类型默认精度支持到秒,可以通过参数
_gbase_timestamp_append_prec 控制使精度支持到微秒,
。
该参数一旦设置为支持精
度到微秒后不允许再回退到精度秒。
Timestamp 开启微秒精度后,DQL、DML、insert select 、导入导出中均支持操
作六位精度类型,dblink 访问远端数据表带精度的数据精度可以被保留。并在如下
时间函数中支持指定精度:
current_timestamp、localtime、localtimestamp、now 及sysdate
示例
初始默认情况下:
gbase> show variables like '_gbase_timestamp_append%';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| _gbase_timestamp_append_prec | OFF |
+------------------------------+-------+
gbase> create table t(a int,b timestamp);
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 355
Query OK, 0 rows affected (Elapsed: 00:00:02.19)
gbase> insert into t values(1,now());
Query OK, 1 row affected (Elapsed: 00:00:00.86)
gbase> insert into t values(2,'2021-3-4 12:12:12.123456');
Query OK, 1 row affected (Elapsed: 00:00:00.17)
gbase> select * from t;
+------+---------------------+
| a | b |
+------+---------------------+
| 1 | 2021-04-05 14:42:41 |
| 2 | 2021-03-04 12:12:12 |
+------+---------------------+
2 rows in set (Elapsed: 00:00:01.11)
将_gbase_timestamp_append_prec 值置为1 后:
gbase> show variables like '%_gbase_timestamp_append_prec%';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| _gbase_timestamp_append_prec | ON |
+------------------------------+-------+
gbase> update t set b='2021-03-04 15:12:12.123';
Query OK, 4 rows affected (Elapsed: 00:00:00.07)
Rows matched: 4 Changed: 4 Warnings: 0
gbase> select * from t;
+------+----------------------------+
| a | b |
+------+----------------------------+
| 1 | 2021-03-04 15:12:12.123000 |
| 2 | 2021-03-04 15:12:12.123000 |
| 3 | 2021-03-04 15:12:12.123000 |
| 4 | 2021-03-04 15:12:12.123000 |
+------+----------------------------+
4 rows in set (Elapsed: 00:00:00.03)
gbase> insert into t values(5,now());
Query OK, 1 row affected (Elapsed: 00:00:00.41)
gbase> select * from t;
+------+----------------------------+
| a | b |
+------+----------------------------+
| 1 | 2021-03-04 15:12:12.123000 |
| 2 | 2021-03-04 15:12:12.123000 |
| 3 | 2021-03-04 15:12:12.123000 |
| 4 | 2021-03-04 15:12:12.123000 |
| 5 | 2021-04-05 14:55:49 |
+------+----------------------------+
5 rows in set (Elapsed: 00:00:00.02)
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 356
gbase> insert into t values(6,now(3));
Query OK, 1 row affected (Elapsed: 00:00:00.34)
gbase> select * from t;
+------+----------------------------+
| a | b |
+------+----------------------------+
| 1 | 2021-03-04 15:12:12.123000 |
| 2 | 2021-03-04 15:12:12.123000 |
| 3 | 2021-03-04 15:12:12.123000 |
| 4 | 2021-03-04 15:12:12.123000 |
| 5 | 2021-04-05 14:55:49 |
| 6 | 2021-04-05 14:56:03.737000 |
+------+----------------------------+
6 rows in set (Elapsed: 00:00:00.03)
gbase> insert into t values(7,now(6));
Query OK, 1 row affected (Elapsed: 00:00:00.07)
gbase> select * from t;
+------+----------------------------+
| a | b |
+------+----------------------------+
| 1 | 2021-03-04 15:12:12.123000 |
| 2 | 2021-03-04 15:12:12.123000 |
| 3 | 2021-03-04 15:12:12.123000 |
| 4 | 2021-03-04 15:12:12.123000 |
| 5 | 2021-04-05 14:55:49 |
| 6 | 2021-04-05 14:56:03.737000 |
| 7 | 2021-04-05 14:56:18.279518 |
+------+----------------------------+
7 rows in set (Elapsed: 00:00:00.02)
TIMESTAMP 使用限制
以下限制说明,是针对TIMESTAMP 数据列自动更新时的场景:
使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属
性后,TIMESTAMP 列在支持INSERT、UPDATE 以及MERGE 时,它的值自动更
新。需要注意的是DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP 在一张表中只能给第一个TIMESTAMP 列使用一次,
也就
是含有多个TIMESTAMP 列时,
只能给第一次出现TIMESTAMP 列使用DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性。
创建一张表时,如果只定义一个TIMESTAMP 列,则DEFAULT
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 357
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 可以省略,系统会
自动添加上。
从不同节点发起的SQL 语句,TIMESTAMP 列更新的时间为发起节点的本地时间;
如果从不同的发起点发起SQL,而各个节点的本地时间又不同步,则无法保证
TIMESTAMP 列更新值一致。