2010-04-20 94 views
2

我有一個名爲pollOfTheWeek的mysql表。它有一個類型爲date的列「pollDate」。我有兩個問題: 1.我在創建表時將列聲明爲[pollDate date]我想要的是當用戶沒有爲該列輸入任何值時自動設置此列。我如何聲明專欄來實現這一目標?如何在mysql表中插入日期

  1. 假設我有與上面相同的聲明,如何輸入空值。我的意思是如果該列是varchar類型的,我會輸入空值作爲「」。但是由於它是日期類型,所以當我輸入值爲「」時出現錯誤。如何爲pollDate列輸入空值?

回答

1

MySQL對默認值的支持極其有限。一般來說,它必須是一個常量表達式,如'0''(none)',並且不允許使用函數。我知道的唯一例外是,您可以將CURRENT_TIMESTAMP設置爲TIMESTAMP列的默認值;但是,這不適用於DATEDATETIME列。不幸的是,TIMESTAMP的範圍較小,包含時間信息。

那麼你的選擇是:

  1. 現在設置在你插入值()做它在您的客戶端應用程序。
  2. 編寫觸發器:

CREATE TRIGGER pollOfTheWeek_trg BEFORE INSERT ON pollOfTheWeek 
    FOR EACH ROW SET NEW.pollDate = NOW(); 

至於關於空值,我會簡單地使用NULL。爲什麼使用空字符串?

1

沒有辦法在mysql中自動設置DATE列到當前日期/時間。 TIMESTAMP雖然可以自動設置爲當前時間。或者,只是通過NOW()當你插入一個參數:

INSERT INTO pollOfTheWeek (name, pollDate) VALUES ('someName', NOW()); 

爲您的其他問題,你可能想允許空值的日期列,並將其設置爲NULL的時候沒有給定的日期。

+0

是的,有 - DEFAULT約束。使用NOW()的缺省值的 – 2010-04-20 15:42:57

+0

不適用於DATE列。除了TIMESTAMP數據類型列外,您不能將函數或表達式用作任何類型列的默認值,您可以將CURRENT_TIMESTAMP指定爲默認值。查看谷歌的詳細信息:) – oedo 2010-04-20 15:47:10

2

你需要創建一個觸發器:

CREATE TRIGGER triggerName 
BEFORE INSERT ON yourTable 
FOR EACH ROW 
SET NEW.date = coalesce(NEW.date, curdate()); 

空值將是null

+0

+1使用COALESCE保持手動插入值 – 2010-04-20 15:44:18