我做了一张桌子:
+---------+--------------+------+-----+---------+----------------+
| 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
有人可以帮忙吗?
答案 0 :(得分:5)
将列(或表)名称作为MySQL保留字通常不是一个好主意。如果你必须这样做,那么在名称
周围使用反引号(`)ALTER TABLE buybacks MODIFY `date` date not null default curdate();
修改强>
但是,您无法将日期列设置为默认值curdate() 有关详细信息,请参阅MySQL buglist中的此参考资料
例外情况是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP的默认值 柱。这可能是一个可行的替代方法,可以为您提供默认
编辑2
另一种选择是触发器:
CREATE TRIGGER buybacks_insert BEFORE INSERT ON `buybacks`
FOR EACH ROW
SET NEW.`date` = CURDATE();
但请注意,在更改日期列的名称时更新触发器