我无法弄清楚为什么这不起作用。使用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
我尝试了上述查询的多种组合,有/无引号和其他变体。任何想法?
答案 0 :(得分:4)
两件事:
这会给你:
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}}的含义。