由于RDS MySQL 5.6 版本引入了GTID特性,因此要求应用不能够在事务中创建和删除临时表。
对应的错误信息:
When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE ca
n be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.
遇到此类问题时可以参考如下两个方法处理:
1、建议
create temporary table
修改为
create table
create table
使用普通表替代临时表,规避这个问题 ;2、修改代码,将临时表的创建和删除操作放在事务外,并且保证会话的参数
autocommit = 1
如果问题还未能解决,请联系
售后技术支持。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到RDS MySQL 5.6版本中因GTID特性导致在事务中无法创建和删除临时表的问题,具体错误信息为:
When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.
您可以尝试以下两种解决方案来规避此问题:
使用普通表替代临时表:
CREATE TEMPORARY TABLE
语句修改为CREATE TABLE
,使用持久化表来替代临时表。这样可以避免在事务上下文中使用临时表的限制。但请注意,这要求您管理表的生命周期,确保数据的一致性和及时清理以模拟临时表的行为。调整代码逻辑与会话设置:
CREATE TEMPORARY TABLE
和DROP TEMPORARY TABLE
操作在事务外部执行。同时,确认当前会话的AUTOCOMMIT
参数设置为1。这意味着每次SQL语句执行后都会自动提交,保持非事务性操作环境。操作示例: - 确保会话的AUTOCOMMIT
设置正确:
SET SESSION autocommit = 1;
如果按照上述建议操作后问题仍未解决,建议联系售后技术支持获取进一步的帮助。
请记得,在进行任何更改之前备份您的数据,以防操作过程中发生意外数据丢失。
参考来源: RDS MySQL 5.6 版本GTID特性对临时表限制的处理方法