首页 文章

MYSQL INSERT INTO语法错误

提问于
浏览
1

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

+-------------------+---------------------+------+-----+---------+-------+
| 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);

但后来我收到以下错误:

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

5 回答

  • 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保留关键字时,或者当标识符包含超出限制集的空白字符或字符时才需要(见下文) . 通常建议避免使用保留关键字作为列或表标识符,尽可能避免引用问题 .

  • 1

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

    SET sql_mode='NO_AUTO_VALUE_ON_ZERO';
    

    在插入0值之前 .

  • 1

    尝试一下(用反引号编辑)

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

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

    如果要插入表的所有列,可以像这样缩短Insert语句:

    INSERT INTO exports_has_export_fields VALUES (0, 78, 3);
    
  • 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);
    
  • 1

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

    所以你应该使用反引号“而不是单引号” .

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

相关问题