我想在下表中插入一个新行:
+-------------------+---------------------+------+-----+---------+-------+
| 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'
答案 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)
index
是reserved 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值之前。