Error number: 3637; Symbol: ER_NOT_HINT_UPDATABLE_VARIABLE; SQLSTATE: HY000
Message: Variable %s cannot be set using SET_VAR hint.
错误说明
ER_NOT_HINT_UPDATABLE_VARIABLE错误表示你在查询语句中使用了Hints参数时,恰巧所指定参数是一个不可更新变量。MySQL使用指令行中给定的启动参数(startup options)来控制查询性能。这些参数被称为变量。变量中的一些部分在MySQL服务器被启用后无法更新,这就是所谓的“不可更新变量”。
ER_NOT_HINT_UPDATABLE_VARIABLE错误消息在MySQL错误日志文件中通常以”variable is not updatable”开头。
常见案例
假设某一查询使用了Hints参数时,该参数指定的变量不可更新,则可能会出现ER_NOT_HINT_UPDATABLE_VARIABLE,例如:
SELECT COUNT(*)
FROM Table1
USE INDEX
(a_non_updatable_variable);
在上面的查询中,a_non_updatable_variable是使用Hints参数指定的,然而它是一个“不可更新变量”,这就会导致ER_NOT_HINT_UPDATABLE_VARIABLE错误。
解决方法
针对ER_NOT_HINT_UPDATABLE_VARIABLE错误,解决方法是尝试更新变量名为指定变量,然后重新运行查询。
如果查询中使用了Hints参数时,为了避免这个错误,可以在开始时先设置变量,比如:
SET a_non_updatable_variable = {value};
SELECT COUNT(*)
FROM Table1
USE INDEX
(a_non_updatable_variable);
在设置变量的同时,可以参考MySQL官方文档,以确保变量的正确值。