2011-03-29 65 views
3

我不明白为什么这不起作用。使用mysql版本5.0.91 -log。和phpMyAdminmysql插入错误...不知道有什么问题

INSERT INTO 'sequences'(
'key', 'author', 'tlength', 'progress', 'time') 
VALUES (
NULL , '00000', 10, 1, NULL 
) 

获取以下错误。

您的SQL语法错误; ( 'key','author','tlength','progress','time') VALUES( NULL, “在1号线

这里的表(名称,类型,属性,空,默认情况下,多余的)

 
key  int(11)  UNSIGNED No      auto_increment 
author  char(20)    No   
tlength tinyint(3) UNSIGNED No   
progress tinyint(4) UNSIGNED No 0 
time  timestamp    Yes CURRENT_TIMESTAMP 

我试着/上述查询的许多组合没有引号和其他变化。任何想法?

回答

4

两件事情:

  • 不要引用表名或字段
  • 'Key'是MySQL中的一个保留字,因此您需要用反引号将该字段名称附上

这会给你:

INSERT INTO sequences (
`key`, author, tlength, progress, time) 
VALUES (
NULL , '00000', 10, 1, NULL 
) 

它往往更容易只是引用的所有字段名和表名与反引号以防万一,但这里的一切可以抓住你了保留字的完整列表:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

3

默认情况下,你不应该pu t引号中的表名。尝试:

INSERT INTO sequences (
    'key', 'author', 'tlength', 'progress', 'time') 
VALUES (
    NULL , '00000', 10, 1, NULL 
) 
+1

在列名中也不应该有引号 – Quassnoi 2011-03-29 09:22:50

+0

正如我所说的......我试过了,没有引号。我仍然收到错误,代码摘录和行号存在差异。 – Victor 2011-03-29 09:56:47

+0

@Victor你可以给我们错误消息,当你尝试它没有引号? – eisberg 2011-03-29 09:57:39

3

与反引号的表和列名替换引号:

INSERT 
INTO `sequences` (`key`, `author`, `tlength`, `progress`, `time`) 
VALUES (NULL, '00000', 10, 1, NULL) 
0

与其他大多数语言一样,引号用作字符串分隔符,因此解释器可以区分关键字和文字。如果你引用表和列名,你告诉MySQL的,他们是数据库对象

SELECT 'CURRENT_TIMESTAMP', CURRENT_TIMESTAMP 

:只要运行这个查询看出区别。

此外,你有一个名为key的专栏。这是MySQL中的一个保留字,您需要将其转义。 MySQL使用了这种情况的语法是报价:

INSERT INTO sequences (`key`, author, tlength, progress, time) 
VALUES (NULL , '00000', 10, 1, NULL) 

最后但并非最不重要的,你不能在key列,如果你将它定义为NOT NULL插入NULL。这就是NOT NULL的意思。

相关问题