2009-11-20 69 views
50

我有一個表timestamp的列,其中默認current_timestamp和更新到current_timestamp在每個更新。如何更改mysql表列的默認值?

我想刪除此列上的「on update」功能。我如何編寫alter語句?

我試過如下:

ALTER TABLE mytable alter column time set DEFAULT now(); 

但這並沒有工作。

+0

你確定它沒有使用觸發器來更新它嗎? – 2009-11-20 12:41:17

+0

此問題應該遷移到StackExcange:數據庫管理員 – 2016-06-25 07:46:37

回答

75

皮特幾乎是正確的,但使用了錯誤的語法 '變化':

​​

公告您必須重複列名稱。此外,請確保您使用反引號而不是單引號來轉義列名稱時間,這可以防止它被解釋爲mysql列類型的時間。

通過指定CURRENT_TIMESTAMP的DEFAULT,MySQL將不再自動更新列。從MySQL Manual

隨着DEFAULT CURRENT_TIMESTAMP子句不用ON UPDATE子句,列有其默認值使用當前的時間戳但是不自動更新。

9

您不能AFAIK使用NOW()等函數作爲默認值。

嘗試

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

(編輯補充逃逸,第二次使用字段名)

+0

得到以下內容: mysql> ALTER TABLE消息更改時間TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; 錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行'NOT NULL DEFAULT CURRENT_TIMESTAMP'附近使用正確的語法。mysql> ALTER TABLE消息CHANGE列時間TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; 錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'NOT NULL DEFAULT CURRENT_TIMESTAMP'附近使用正確的語法。 – Tihom 2009-11-20 14:13:33

+0

很抱歉忘了添加轉義,並且字段名稱出現兩次。 – Pete 2009-11-20 16:25:57