用铁轨锁定桌子

时间:2013-10-16 15:35:30

标签: mysql ruby-on-rails-3

我有一张桌子,我希望在(~20分钟)内进行相当长时间的迁移。在此期间,表格的内容根本不应改变。但是,在迁移运行时,这个表(以及许多其他人)的前端将保持运行状态,并且很有可能有人会尝试修改某些数据(如果该调用最终会抛出错误,那就没问题)。

我们使用MySQL并在我们的连接池中允许10个连接。我是否正确地假设在事务中包装此迁移是不够的,但是我还必须锁定表本身?

1 个答案:

答案 0 :(得分:3)

如果你真的想确保表中没有任何修改,最安全的办法是将表锁定在mysql级别。

但是,如果您只是想确保不会发生竞争性写入/覆盖,您也可以使用optimistic locking。有一点需要注意的是,这可能意味着,导入脚本会抱怨并且某些保存可能会失败,因为在读取和写入之间,前端可能已经更改了记录。

假设没关系,你可以重复那些单独的写,这就是它的工作方式:

按照惯例,您必须在相关表格中添加一个名为lock_version的整数列,然后以我们喜欢的方式进行神奇的设置。

我还鼓励您在linked documentation中阅读更多内容,如果您愿意,我们可以在评论中讨论。

相关问题