2010-09-09 165 views
0

前段时间我对此提出了一个问题,但是我仍然有一个问题。我有一个销售表的mysql5数据库,其中包含一个代表销售的时间戳。如果销售表中的某个字段修改或更改了时间戳,则更新为当前时间(更改时间)。为了防止这种情况,我已经取消选择on_update_select_current_timestamp选项,但时间戳仍然会更改?当修改记录时,mysql时间戳更新

这里的场看起来如何在phpMyAdmin

alt text

没有人有任何想法,我应该做的,取消选中CURRENT_TIMESTAMP的选择似乎重置on_update_select_current_timestamp触发

+0

我知道这是很久以前问过的,但我的解决方案是将默认值设置为空,并且没有使用current_timestamp更新它。这样,它没有更新,并没有影响我以前的数据。在phpmyadmin(4.2.11)中,您可以通过选中null复选框来完成此操作。 – GreeKatrina 2015-02-19 20:13:01

回答

0

如果你不想此字段将自动更新,只是根本不使用时间戳类型字段
改为使用datetime。

+0

在这里一个愚蠢的问题的位,但...我的数据库有成千上万的记录,如果我更改数据库表,以便时间戳字段是一个日期时间它会搞砸我的网站,例如我的SQL插入将无法正常工作,销售时间将不会正确格式化? – 2010-09-09 07:02:12

+0

@Mike是的,这是一个愚蠢的问题。你也必须改变你的代码。我的回答不是关于你的遗留代码,以及如何处理愚蠢的设计缺陷。但关于数据库设计,如何正确使用你的工具。遗留代码的后果是另一回事。虽然代码重写没有什么不好的地方。它被称为重构,它是你工作的一部分。 – 2010-09-09 07:15:35

+0

但是你很幸运,因为在mysql5时间戳中有与datetime相同的格式,afaik – 2010-09-09 07:16:58

0

检查表定义,如果CURRENT-TIMESTAMP选项真的被禁用。

如果其禁用,它应该看起来像......

CREATE TABLE `sometable` (
    ...somefields... 
    `Sale_Time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' INT(11) DEFAULT NULL, 
    ...somefields... 
) ENGINE=someengine 

...否则CURRENT-TIMESTAMP将在此行中可见。禁用时,它不更新更新,除非某些其他数据库函数(触发器等)在更新字段时更改它。