开发者社区> 问答> 正文

由于在MySQL中使用保留字作为表或列名而导致的语法错误

我正在尝试执行一个简单的MySQL查询,如下所示:

INSERT INTO user_details (username, location, key) VALUES ('Tim', 'Florida', 42) 但我收到以下错误:

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取'key) VALUES ('Tim', 'Florida', 42)'在第1行附近使用的正确语法

我该如何解决该问题?

展开
收起
保持可爱mmm 2020-05-08 09:49:26 473 0
1 条回答
写回答
取消 提交回答
  • 您有两个选择。

    1.不要使用保留字作为标识符 最简单的解决方案是避免使用保留字作为标识符。您可能会为您的列找到另一个合理的名称,该名称不是保留字。

    这样做有两个优点:

    它消除了您或其他使用数据库的开发人员由于忘记(或不知道)特定标识符是保留字而意外写入语法错误的可能性。MySQL中有许多保留字,大多数开发人员不太可能全部了解。通过首先不使用这些词,可以避免为自己或将来的开发人员留下陷阱。

    SQL方言中引用标识符的方式不同。虽然MySQL使用反引号在默认情况下,符合ANSI标准SQL引用标识符(实际上在MySQL ANSI SQL模式,如注意这里)用来引用标识符双引号。这样,用反引号引起来的标识符查询不易移植到其他SQL方言中。

    纯粹是为了减少将来发生错误的风险,这通常比反引号引用标识符更明智。

    2.使用反引号 如果无法重命名表或列,请`按照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)"; ^ ^ 来源:stack overflow

    2020-05-08 09:49:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像