我在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的触发器中设置值,也会覆盖该值。
感谢您提供的任何清晰度。