2011-03-09 36 views
0

我做了一個表格:MySQL的日期列搞砸

+---------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+---------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| date | date   | NO |  | NULL |    | 
| user_id | int(8)  | YES |  | NULL |    | 
| isbn | varchar(13) | NO |  | NULL |    | 
| price | decimal(6,2) | NO |  | NULL |    | 
+---------+--------------+------+-----+---------+----------------+ 

而且,日期colomn不工作。我想我需要修改表格默認爲「CURDATE()」。這就是我從谷歌搜索獲得的。我甚至不確定這是否是問題,但我的更改聲明不起作用。

我想這個改變:

mysql> ALTER TABLE buybacks MODIFY date date not null default curdate(); 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'curdate()' at line 1 

有人能幫忙嗎?

回答

5

使用MySQL保留字的列(或表)名通常不是一個好主意。如果你必須這樣做,然後使用反引號(')周圍的名字

ALTER TABLE buybacks MODIFY `date` date not null default curdate(); 

編輯

但是,你不能設置一個日期欄CURDATE的默認() 看到這個參考來自MySQL buglist的詳細信息

例外情況是,您可以指定CURRENT_TIMESTAMP作爲TIMESTAMP 列的默認值。這可能是一個可行的選擇,給你的是默認

EDIT 2

另一種方法是觸發:

CREATE TRIGGER buybacks_insert BEFORE INSERT ON `buybacks` 
    FOR EACH ROW 
     SET NEW.`date` = CURDATE(); 

但是要注意的是,您更新觸發,當你改變日期列的名稱

+0

感謝馬克,我得到它的工作後,我會看到有關重命名它。這有點煩人。我做桌子時就沒有發生過。即使使用反引號,我也遇到了同樣的錯誤: 'mysql> ALTER TABLE buybacks MODIFY'date' date not null默認curdate(); 錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行'curdate()'附近使用正確的語法' – Charlie 2011-03-09 14:54:15

+0

謝謝,Mark。我會嘗試製作數據類型TIMESTAMP。我真的只需要YYYY-MM-DD,這就是我使用DATE的原因。我會將它轉換爲TIMESTAMP,並且只在需要日期時才嘗試將該格式取出。 – Charlie 2011-03-09 14:59:58

+0

謝謝,馬克。我最終將數據類型更改爲TIMESTAMP並使用CURRENT_TIMESTAMP。我太多是一個新手進入觸發器。 感謝您的幫助!我全部修好了。 – Charlie 2011-03-09 15:23:04