由于在MySQL中使用保留字作为表或列名而导致的语法错误
。编辑现有答案以改善此职位。它目前不接受新的答案或互动。
我正在尝试执行一个简单的MySQL查询,如下所示:
INSERT INTO user_details (username, location, key)VALUES ('Tim', 'Florida', 42)
但我收到以下错误:
错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取
'key) VALUES ('Tim',
'Florida', 42)'在第1行附近使用的正确语法
我该如何解决该问题?
回答:
问题
在MySQL中,某些字词SELECT
(INSERT
,DELETE
等等)是保留字。由于它们具有特殊含义,因此每当您将它们用作表名,列名或其他类型的标识符时,MySQL都会将其视为语法错误-
除非您用反引号将标识符引起来。
如官方文档中所述,在 10.2模式对象名称
(添加了重点)中:
MySQL中的某些对象,包括数据库,表,索引,列,别名,视图,存储过程,分区,表空间和其他对象名,称为 。
…
如果标识符包含特殊字符或为 ,则在引用标识符时 必须将其 引用。
…
标识符引号是 (“ ```”):
有关关键字和保留字的完整列表,请参见第
10.3 节“
关键字和保留字”
。在该页面中,后跟“(R)”的单词是保留单词。下面列出了一些保留字,包括许多容易引起此问题的字。
- 加
- 和
- 之前
- 通过
- 呼叫
- 案件
- 健康)状况
- 删除
- 数据中心
- 描述
- 从
- 组
- 在
- 指数
- 插
- 间隔
- 是
- 键
- 喜欢
- 限制
- 长
- 比赛
- 不
- 选项
- 要么
- 订购
- 划分
- 参考资料
- 选择
- 表
- 至
- 更新
- 哪里
解决方案
您有两个选择。
回答:
最简单的解决方案是避免使用保留字作为标识符。您可能会为您的列找到另一个合理的名称,该名称不是保留字。
这样做有两个优点:
它消除了您或其他使用数据库的开发人员由于忘记(或不知道)特定标识符是保留字而意外写入语法错误的可能性。MySQL中有许多保留字,大多数开发人员不太可能全部了解。通过首先不使用这些词,可以避免为自己或将来的开发人员留下陷阱。
SQL方言中引用标识符的方式不同。虽然MySQL使用反引号在默认情况下,符合ANSI标准SQL引用标识符(实际上在MySQL ANSI SQL模式,如注意这里)用来引用标识符双引号。这样,用反引号引起来的标识符查询不易移植到其他SQL方言中。
纯粹是为了减少将来发生错误的风险,这通常比反引号引用标识符更明智。
回答:
如果无法重命名表或列,请```按照
10.2架构对象名称
前面的报价中的描述,将有问题的标识符包装在反引号()中。
演示用法的示例(摘自10.3关键字和保留字):
mysql> **CREATE TABLE interval (begin INT, end INT);**
ERROR 1064 (42000): You have an error in your SQL syntax.
near 'interval (begin INT, end INT)'
mysql> **CREATE TABLE `interval` (begin INT, end INT);**
Query OK, 0 rows affected (0.01 sec)
同样,可以通过将关键字包装key
在反引号中来固定问题的查询,如下所示:
INSERT INTO user_details (username, location, `key`)VALUES ('Tim', 'Florida', 42)"; ^ ^
以上是 由于在MySQL中使用保留字作为表或列名而导致的语法错误 的全部内容, 来源链接: utcz.com/qa/414390.html