You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQL中有时需用`包裹表名,有时却无需?

为什么MySQL中表名有时需要用`包裹,有时无需?

核心原因是标识符与SQL关键字冲突:

  • range是MySQL的保留关键字(用于范围相关的语法逻辑,比如配合BETWEEN实现范围查询),直接将它作为表名时,SQL解析器会把它当作关键字处理,而非表名,因此触发语法错误。必须用`包裹,明确告诉解析器这是一个表名标识符。
  • range_relation只是普通的自定义标识符,和任何MySQL关键字都不冲突,所以可以直接使用,不需要额外包裹。

需要用`包裹标识符(表名、列名等)的场景:

  • 标识符与MySQL的保留关键字重名时,必须包裹。
  • 标识符包含特殊字符(空格、连字符-、中文等),或者以数字开头时,需要包裹。

示例对比:

  • 错误写法:
    SELECT * FROM order WHERE id=1;
    
    (order是MySQL保留关键字,直接使用会报错)
  • 正确写法:
    SELECT * FROM `order` WHERE id=1;
    

注:部分SQL模式(如ANSI_QUOTES)支持用双引号"代替反引号,但反引号是MySQL默认的标识符包裹方式,兼容性更强。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:10:30