2016-12-25 27 views
1

我有一个看起来像这样的表模式:基于此模式插入数据的正确结构是什么?

mysql> desc category; 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(255) | NO |  | NULL |    | 
| create_date | datetime  | NO |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 
3 rows in set (0.01 sec) 

我试图插入数据,我不断收到此错误:

mysql> INSERT INTO category (id, name, create_date) VALUES (NULL, Family Events, 2016-25-12 00:00:00), (NULL, Work Events, 2016-25-12 00:00:00); 
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 'Events, 2016-25-12 00:00:00), (NULL, Work Events, 2016-25-12 00:00:00)' at line 1 

我已经尝试了其他几种方法具有相同的结果我还没有找到任何好的文档。

我尝试这样做:

mysql> INSERT INTO category(id, name, create_date) VALUES(NULL, 'Family Events', 'NOW()'); 

,并得到这个错误:

ERROR 1292 (22007): Incorrect datetime value: 'NOW()' for column 'create_date' at row 1 

回答

1

随着OP agreed with my answer,我加入了。与你所遵循的是程序的问题,您应该'环绕您的​​字符串值:

-- If the column is a `DATETIME`, then use: 
VALUES (NULL, 'Family Events', NOW()), 
//------------^-------------^ 
-- If the column is a `TIMESTAMP`, then use: 
VALUES (NULL, 'Family Events', CURRENT_TIMESTAMP), 
//------------^-------------^ 

而且我使用CURRENT_TIMESTAMP的时间戳插入或者到NOW()。其他人已经指出的是

一件事,你并不需要,因为它会自动它基于PRIMARY KEY添加额外的idINSERT,并因为它需要NULL值,你可以完全摆脱它。

你最终的SQL应该像:

INSERT INTO category(name, create_date) VALUES('Family Events', CURRENT_TIMESTAMP); 
+1

与CURRENT_TIMESTAMP,当然引号的答案是解决方案。 – Daniel

+0

@Daniel谢谢...我已经添加了两个变体... –

+0

@Daniel检查我给出了解释什么时候使用...':)' –

相关问题