mysql插入错误...不确定是什么问题

时间:2011-03-29 09:18:45

标签: mysql insert phpmyadmin

我无法弄清楚为什么这不起作用。使用mysql版本5.0.91-log。和phpMyAdmin

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

收到以下错误。

  

您的SQL语法有错误;检查与MySQL>服务器版本对应的手册,以便在“序列”附近使用正确的语法(   'key','author','tlength','progress','time')   价值观(   NULL,'在第1行

这是表(名称,类型,属性,null,默认,额外)

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

默认情况下,您不应将表名放在引号中。尝试:

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

答案 2 :(得分:3)

将引号替换为表名和列名的反引号:

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

答案 3 :(得分:0)

与大多数其他语言一样,引号用作字符串分隔符,因此解释器可以将关键字与文字区分开来。只需运行此查询即可查看差异:

SELECT 'CURRENT_TIMESTAMP', CURRENT_TIMESTAMP

如果引用表名和列名,则告诉MySQL他们不是数据库对象。

此外,您还有一个名为key的列。这是MySQL中的一个保留字,你需要逃避它。 MySQL用于此类情况的语法是 back 引用:

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

最后但并非最不重要的一点是,如果您将key列定义为NOT NULL,则无法在NOT NULL列中插入NULL。这就是{{1}}的含义。