什么是自动填充此列?

时间:2014-12-07 18:58:16

标签: mysql timestamp

我在Win 7 64Bit上使用MySQL 5.6.1。

我有一个标准的审计列,我添加到我的所有表中,称为CRT_TS(创建时间戳),以及UPD_TS(更新时间戳)列。我曾计划使用utc_timestamp()通过前插入触发器和更新前触发器来填充这些内容。

UPD_TS列的行为与我期望的一样。但是,CRT_TS列似乎在没有为该列定义默认值或触发器的情况下自动填充。

我能够通过运行以下脚本来重现此行为。

create schema `test` default character set utf8 collate utf8_general_ci;

drop table test.TEST_TABLE;

create table test.TEST_TABLE(
    TEST_ID             int             not null    auto_increment ,

    CRT_TS              timestamp       not null ,
    UPD_TS              timestamp       not null ,

    TEST_ALIAS          varchar(64)     not null ,
primary key   PK_PERM (TEST_ID) ,
unique  index UI_PERM_01 (TEST_ALIAS) )
auto_increment = 1001;

insert into test.TEST_TABLE
(TEST_ID
,TEST_ALIAS)
values
(1
,'testing');

select *
from   test.TEST_TABLE;

在上面的例子中,没有为CRT_TS列提供一个值,但是它正在填充与now()函数提供的值相同的值。 UPD_TS列填充了全部零,但两列的定义相同。

我的问题是,填充CRT_TS列的是什么?我试图将UPD_TS和CRT_TS列都设置为utc_timestamp()值。即使在CRT_TS的触发器中设置值,也会覆盖该值。

感谢您提供的任何清晰度。

0 个答案:

没有答案