mySQL日期列搞砸了

Cha*_*lie 0 php mysql datetime date

我做了一张桌子:

+---------+--------------+------+-----+---------+----------------+
| 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    |                |
+---------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

并且,日期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
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Mar*_*ker 5

将列(或表)名称作为MySQL保留字通常不是一个好主意.如果你必须这样做,那么在名称周围使用反引号(`)

ALTER TABLE buybacks MODIFY `date` date not null default curdate();
Run Code Online (Sandbox Code Playgroud)

编辑

但是,您无法将日期列设置为默认值curdate()有关详细信息,请参阅MySQL错误列表中的此参考

例外情况是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值.这可能是一个可行的替代方案,可以为您提供默认值

编辑2

另一种选择是触发器:

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

但请注意,在更改日期列的名称时更新触发器