2015-02-23 97 views
0

在MySQL中,我想有一個類型爲TIMESTAMP類型的表列,但其中不是更新到行更新當前時間戳。避免「在更新current_timestamp」

我的表是作爲下面簡單:

CREATE TABLE `test` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `lastAccess` TIMESTAMP NOT NULL, 
    PRIMARY KEY (`id`) 
); 

然後它被MySQL的創建類似如下:

DESCRIBE TABLE `test`; 
+------------+---------------------+------+-----+-------------------+-----------------------------+ 
| Field  | Type    | Null | Key | Default   | Extra      | 
+------------+---------------------+------+-----+-------------------+-----------------------------+ 
| id   | bigint(20) unsigned | NO | PRI | NULL    | auto_increment    | 
| lastAccess | timestamp   | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+------------+---------------------+------+-----+-------------------+-----------------------------+ 

如何避免的默認值,以及作爲「更新」行爲?

我使用InnoDB引擎,如果它很重要。

MySQL版本:5.5.41-0ubuntu0.14.04.1

+0

改爲使用日期時間字段?時間戳應該更新自己......或者包含更新中的字段,所以它是'update ... set lastaccess = lastaccess',使它用自己的當前值更新自己。 – 2015-02-23 17:23:03

+0

@MarcB感謝您的評論。我決定時間戳,因爲它是(至少我認爲它)基本上是一個UNIX時間戳(整數)和時區無關的(不是日曆日期+掛鐘時間,而是世界時間線上的一個點) - 也許我畢竟這個時間戳應該使用BIGINT ... – leemes 2015-02-23 17:26:04

回答

0

正如馬克乙方在評論已經提到的TIMESTAMP默認行爲是應該這樣做。

我發現,當你設置在表中創建一個默認值(或ALTER吧),默認不再CURRENT_TIMESTAMP(明顯),「上更新CURRENT_TIMESTAMP」的屬性被刪除(有趣) 。

CREATE TABLE `test` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `lastAccess` TIMESTAMP NOT NULL DEFAULT 0, 
    --        ^^^^^^^^^ 
    PRIMARY KEY (`id`) 
); 

而且有趣的是,如果你設置DEFAULT CURRENT_TIMESTAMP但省略了屬性,它不設置。只有在提供沒有默認時纔會默默設置。