MYSQL INSERT INTO语法错误

时间:2015-08-20 10:04:13

标签: mysql

我想在下表中插入一个新行:

+-------------------+---------------------+------+-----+---------+-------+
| Field             | Type                | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+-------+
| index             | bigint(20) unsigned | NO   | PRI | NULL    |       |
| exports_fields_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| exports_id        | bigint(20) unsigned | NO   | MUL | NULL    |       |
+-------------------+---------------------+------+-----+---------+-------+

因此我尝试了以下sql语句:

INSERT INTO 'exports_has_export_fields' ('index', 'exports_fields_id', 'exports_id') VALUES (0, 78, 3);

但后来我收到以下错误:

  

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在''exports_has_export_fields'附近使用正确的语法('index','exports_fields_id','exports_id')第1行的VALUES'

5 个答案:

答案 0 :(得分:3)

您使用单引号,但需要反引号(`)来引用名称可能与MySQL保留关键字冲突的字段或表。

在这种情况下,只有index是一个保留的,即使你可以为了安全起见,也可以反击所有内容。

所以你可以说:

INSERT INTO `exports_has_export_fields` (`index`, `exports_fields_id`, `exports_id`) VALUES (0, 78, 3);
            ^                         ^  ^     ^  ^                 ^  ^          ^

或只是

INSERT INTO exports_has_export_fields (`index`, exports_fields_id, exports_id) VALUES (0, 78, 3);
                                       ^     ^  

来自When to use single quotes, double quotes, and backticks?

  

反引号将用于表和列标识符,但是   仅在标识符为MySQL reserved keyword时才需要,   或者当标识符包含空格字符或字符时   超出有限集(见下文)通常建议避免   尽可能使用保留关键字作为列或表标识符,   避免引用问题。

答案 1 :(得分:1)

尝试使用(使用反引号编辑)

        routes.MapRoute(
            "ReallyBadIdea",
            "{*url}",
            new { controller = "FrontController", action = "Index" }
            );

表名和列名不应该有单引号。

如果要插入表的所有列,可以缩短Insert语句,如下所示:

INSERT INTO `exports_has_export_fields` (`index`, `exports_fields_id`, `exports_id`) VALUES (0, 78, 3);

答案 2 :(得分:1)

您是否尝试从表名和字段中删除单引号?

INSERT INTO exports_has_export_fields (`index`, exports_fields_id, exports_id) VALUES (0, 78, 3);

或者如果您想缩短查询,请尝试

INSERT INTO exports_has_export_fields VALUES (0, 78, 3);

答案 3 :(得分:1)

indexreserved word。引用它(带反叛)。

所以你应该使用反引号`而不是单引号'。

INSERT INTO `exports_has_export_fields` (`index`, `exports_fields_id`, `exports_id`) VALUES (0, 78, 3);

答案 4 :(得分:1)

我认为字段index是主键,而不是零 尝试

SET sql_mode='NO_AUTO_VALUE_ON_ZERO';
插入0值之前