execute语句是否在异常时没有回滚?

时间:2013-01-10 18:26:55

标签: mysql ruby-on-rails ruby transactions

我有一个迁移,我正在更改MySQL表的字符集,从latin1到utf-8。在那之后,我试图以某种方式改变对象。我希望如果一个对象无法保存以回滚数据库,包括字符集更改。这是我的代码:

def up
  execute "ALTER TABLE posts CONVERT TO CHARACTER SET utf-8;"
  posts = Post.find_each do |post|
    # modify post.content
    post.save!
  end
  raise "rollback"
end 

我正在做raise "rollback",因为我想测试并确保迁移成功完成。但是,如果我在迁移回滚后执行show create table posts,我会发现它的字符集仍然是utf-8。 execute语句是否未包含在事务中?

1 个答案:

答案 0 :(得分:3)

alter table在mysql中执行implicit commit。您无法回滚alter