2013-12-09 42 views

回答

39

它不起作用,因爲它不支持

DEFAULT子句指定的列的默認值。有一個例外,默認值必須是常數;它不能是一個函數或表達式。這意味着,例如,您不能將日期列的默認值設置爲函數的值,例如NOW()CURRENT_DATE。唯一的例外是,您可以指定CURRENT_TIMESTAMP作爲默認的TIMESTAMP

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

+0

是否可以將時間戳值的格式設置爲僅限日期? – inControl

+0

@inControl:是的,使用'DATE_FORMAT' – zerkms

+7

這是2016年,說實話,這仍然是真實的事實是荒謬的。我認爲常量同義詞的全部原因是讓它們在非常量表達式中被禁止。 – Dan

2

至於對方的回答正確地指出,你不能使用動態功能作爲默認值。您可以使用TIMESTAMPCURRENT_TIMESTAMP屬性,但這並不總是可行的,例如,如果要保留創建更新時間戳,並且您需要第二個唯一允許的TIMESTAMP列。

在這種情況下,use a trigger instead

+1

對自動時間戳數量的限制已被解除[在MySQL 5.6中](http:///dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html)。 –

+0

感謝您的補充,沒有意識到這一點 - 仍然需要記住,因爲大多數虛擬主機仍然是5.1或5.5。 –

+0

MariaDB 10.2.1允許'DEFAULT(表達式)'。請參閱[創建表格](https://mariadb.com/kb/en/mariadb/create-table/)。 –

18

將您的日期列聲明爲NOT NULL,但沒有默認值。然後添加此觸發器:

USE `ddb`; 
DELIMITER $$ 
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW 
if (isnull(new.query_date)) then 
set new.query_date=curdate(); 
end if; 
$$ 
delimiter ; 
+0

我不得不將字段設置爲'NULL'來完成這個工作,否則它會插入'0000-00-00'。 MySQL v5.6.12。 – lolbas