MySQL用Read作为字段名报1064语法错误,有哪些需规避的保留字?
报错原因
Read 是MySQL官方定义的保留关键字,你的代码直接将列名作为标识符拼接进SQL语句时,MySQL解析器会优先将Read识别为语法关键字,而非你自定义的字段名,从而触发1064语法错误,报错日志中指向Read = 'ALL'位置的提示也对应了这个根因。
可选修复方案
除了你已经采用的修改列名的方案外,如果确实需要保留该字段名,可以在拼接SQL时用反引号包裹所有动态传入的标识符,修改后的SQL语句参考如下:
sql_update = f"""Update {tbl} set `{target_col}` = %s where `{key_col}` = %s"""
不过该方案属于兼容处理,长期使用更建议避免用保留字作为自定义标识符,降低后续维护风险。
需要规避的常见MySQL保留字
以下是高频容易被误用为字段名的保留字,开发时需要注意避开:
- 数据库操作类:ADD、ALTER、DELETE、DROP、INSERT、SELECT、UPDATE、CREATE、INDEX、DATABASE、TABLE
- 权限状态类:READ、WRITE、USER、PASSWORD、GRANT、REVOKE、ADMIN
- 语法逻辑类:AND、OR、NOT、NULL、TRUE、FALSE、DEFAULT、COLUMN、ROW、ORDER、GROUP、LIMIT、WHERE、FROM、JOIN、UNION
- 约束类:KEY、PRIMARY、FOREIGN、UNIQUE、CHECK、REFERENCES、VALUES
- 其他常见保留字:SET、AS、ON、OFF、INTO、USE
如果你需要完整的保留字列表,可以查阅你当前使用的MySQL版本对应的官方文档,所有官方标注的保留字都不建议用作库名、表名、字段名、别名等自定义标识符。
内容的提问来源于stack exchange,提问作者cmccall95
相关产品推荐
相关产品推荐

