Mysql 如何在加载装置之后但在创建保存点之前执行SQL语句?

Mysql 如何在加载装置之后但在创建保存点之前执行SQL语句?,mysql,ruby-on-rails,auto-increment,Mysql,Ruby On Rails,Auto Increment,我们有一个模型,它使用另一个模型的表上的auto_增量从另一个模型的ID获取序列号。每当数据库服务器重新启动时,该值就会设置为零,因此序列号会重置。为了解决这个问题,在after_initialize块中,我们将auto_increment值设置为最大序列值加1,一切正常 但是,在测试中,块在加载夹具之前运行,因此最大值返回为零。然后,当测试运行时,该值太低,因此测试失败 一种可能的解决方案是更新设置块中的值,但更改表会提交当前事务,因此测试结束时的回滚失败 在加载装置后,但在创建保存点之前,如

我们有一个模型,它使用另一个模型的表上的auto_增量从另一个模型的ID获取序列号。每当数据库服务器重新启动时,该值就会设置为零,因此序列号会重置。为了解决这个问题,在after_initialize块中,我们将auto_increment值设置为最大序列值加1,一切正常

但是,在测试中,块在加载夹具之前运行,因此最大值返回为零。然后,当测试运行时,该值太低,因此测试失败

一种可能的解决方案是更新设置块中的值,但更改表会提交当前事务,因此测试结束时的回滚失败


在加载装置后,但在创建保存点之前,如何更改自动增量值?

最终找到了一种方法,即在test\u helper.rb结束时对加载装置进行猴子修补:

module ActiveRecord
  module TestFixtures
    def load_fixtures_with_auto_increment_reset
      load_fixtures_without_auto_increment_reset
      # code to reset auto_increment goes here
    end

    alias_method :load_fixtures_without_auto_increment_reset, :load_fixtures
    alias_method :load_fixtures, :load_fixtures_with_auto_increment_reset
  end
end