2012-10-14 310 views
12

我已經看到了很多相關的問題,但我不能把我的手指上這個具體問題:MySQL是不允許ON UPDATE CURRENT_TIMESTAMP的DATETIME場

我有一個MySQL表既具有TIMESTAMP(何時該字段已創建)和DATETIME(每次更新字段時)。它看起來像這樣:

CREATE TABLE 'vis' (
ID BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
ENTRY VARCHAR(255), 
AUTHOR VARCHAR(255), 
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
UPDATED_AT DATETIME ON UPDATE CURRENT_TIMESTAMP, 
UPDATED_BY VARCHAR(255) 
) 

當我嘗試這雖然,我得到的錯誤是:(SQL Error: 1294 SQL State: HY000) - Invalid ON UPDATE clause for 'updated_at' field

無論我已閱讀(甚至在Stack Overflow)建議我應該能夠做到這一點,但我收到這個錯誤。也許還有另一種方法可以讓我每次更新它時都會自動更新時間?

我正在使用MySQL Server 5.5。

回答

20

DATETIME更新時無法使用CURRENT_TIMESTAMP。相反,將其更改爲TIMESTAMP

或者,可以考慮使用一個觸發針對這一情況:http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html

編輯:正如在評論(感謝@АлександрФишер!),這已不再是從MySQL 5.6.5的情況下,使另一種解決方案就是升級你的服務器如果可能。

+2

這完全奏效,謝謝!我在表聲明中刪除了'ON UPDATE CURRENT TIMESTAMP',然後在創建表之後我處理了這個語法:'CREATE TRIGGER'vis_update_entry'之前更新'vis'FOR EACH ROW SET NEW.updated_at = CURRENT_TIMESTAMP' 現在每次更新該特定行時都會更新。 故事的道德:**網上任何地方,說你可以做兩個TIMESTAMPS或一個DATETIME ON UPDATE是假的!**至少在MySQL服務器5.5。 –

+3

@MichaelPlautz - 總是很高興看到一個「謝謝,我解決了它與您的資源」而不是「好吧,但我需要代碼做這個觸發器」,謝謝:) – slugonamission

+2

使用的版本似乎是非常重要的。文檔說,如果使用MySQL版本5.6,它應該可以工作:http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html。我無法證實,因爲我的服務器5.1 :( –

0

是的,如果你改變它時間戳,既不DEFAULT CURRENT_TIMESTAMP也不ON UPDATE CURRENT_TIMESTAMP,它是一樣的同時指定DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP

+0

請澄清:沒有任何修飾符,它自動默認和更新? –

1

MySQL的允許使用默認值DateTime功能。 (請參閱MySQL數據類型Defaults。)

0

插入和更新日期/時間自動

作品數據類型:DATETIME或TIMESTAMP

測試於:MySQL的5.6.27-2和MariaDB的10.1。10個


存儲當前日期和時間在INSERT

CREATE TABLE table_demo (
    ... 
    `CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP 
    ... 
); 

存儲當前日期和時間在插入和更新

CREATE TABLE table_demo (
    ... 
    `UpdatedAt` datetime EFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
    ... 
); 

存儲當前日期和唯一時間in UPDATE

注意:什麼時候INSERT的默認值是' 0000-00-00 00:00:00'

CREATE TABLE table_demo (
    ... 
    `UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP 
    ... 
); 
0

看看我的照片。

集列提起類型時間戳,在更新CURRENT_TIMESTAMP屬性 &外也。在我的情況下,更改數據庫中的字段類型後沒有問題。但不能確定所有情況。 enter image description here

相關問題