CURDATE()是一個函數,你不能把它作爲一個默認值。
從http://dev.mysql.com/doc/refman/5.5/en/data-type-defaults.html
在數據類型規範的默認值子句表示爲列的默認值。有一個例外,默認值必須是常數;它不能是一個函數或表達式。這意味着,例如,您不能將日期列的默認值設置爲NOW()或CURRENT_DATE等函數的值。例外是您可以指定CURRENT_TIMESTAMP作爲TIMESTAMP列的默認值。請參見第11.3.5節「自動初始化和更新TIMESTAMP」。
這意味着你可以解決它像這樣的例子:
CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (OrderId)
);
讓我們插入一些到這個表:
INSERT INTO Orders(OrderId, ProductName) VALUES (1,'Foo');
現在選擇:
SELECT OrderId,ProductName,OrderDate FROM Orders;
+---------+-------------+---------------------+
| OrderId | ProductName | OrderDate |
+---------+-------------+---------------------+
| 1 | Foo | 2014-01-20 02:12:27 |
+---------+-------------+---------------------+
上面給出OrderDate的日期和時間,如果您只想要日期部分,那麼這裏是解決方案:
SELECT OrderId,ProductName,DATE(OrderDate) AS OrderDate FROM Orders;
+---------+-------------+------------+
| OrderId | ProductName | OrderDate |
+---------+-------------+------------+
| 1 | Foo | 2014-01-20 |
+---------+-------------+------------+
我不能相信w3schools是錯誤的這一個。 –