我有一個名爲pollOfTheWeek的mysql表。它有一個類型爲date的列「pollDate」。我有兩個問題: 1.我在創建表時將列聲明爲[pollDate date]我想要的是當用戶沒有爲該列輸入任何值時自動設置此列。我如何聲明專欄來實現這一目標?如何在mysql表中插入日期
- 假設我有與上面相同的聲明,如何輸入空值。我的意思是如果該列是varchar類型的,我會輸入空值作爲「」。但是由於它是日期類型,所以當我輸入值爲「」時出現錯誤。如何爲pollDate列輸入空值?
我有一個名爲pollOfTheWeek的mysql表。它有一個類型爲date的列「pollDate」。我有兩個問題: 1.我在創建表時將列聲明爲[pollDate date]我想要的是當用戶沒有爲該列輸入任何值時自動設置此列。我如何聲明專欄來實現這一目標?如何在mysql表中插入日期
MySQL對默認值的支持極其有限。一般來說,它必須是一個常量表達式,如'0'
或'(none)'
,並且不允許使用函數。我知道的唯一例外是,您可以將CURRENT_TIMESTAMP
設置爲TIMESTAMP
列的默認值;但是,這不適用於DATE
或DATETIME
列。不幸的是,TIMESTAMP
的範圍較小,包含時間信息。
那麼你的選擇是:
。
CREATE TRIGGER pollOfTheWeek_trg BEFORE INSERT ON pollOfTheWeek
FOR EACH ROW SET NEW.pollDate = NOW();
至於關於空值,我會簡單地使用NULL。爲什麼使用空字符串?
沒有辦法在mysql中自動設置DATE
列到當前日期/時間。 TIMESTAMP
雖然可以自動設置爲當前時間。或者,只是通過NOW()
當你插入一個參數:
INSERT INTO pollOfTheWeek (name, pollDate) VALUES ('someName', NOW());
爲您的其他問題,你可能想允許空值的日期列,並將其設置爲NULL的時候沒有給定的日期。
你需要創建一個觸發器:
CREATE TRIGGER triggerName
BEFORE INSERT ON yourTable
FOR EACH ROW
SET NEW.date = coalesce(NEW.date, curdate());
空值將是null
。
+1使用COALESCE保持手動插入值 – 2010-04-20 15:44:18
是的,有 - DEFAULT約束。使用NOW()的缺省值的 – 2010-04-20 15:42:57
不適用於DATE列。除了TIMESTAMP數據類型列外,您不能將函數或表達式用作任何類型列的默認值,您可以將CURRENT_TIMESTAMP指定爲默認值。查看谷歌的詳細信息:) – oedo 2010-04-20 15:47:10