【问题标题】:Lock innoDB table temporarily临时锁定 innoDB 表
【发布时间】:2010-05-08 02:39:53
【问题描述】:

我在我当前的网络应用程序中制作了包含几千行的更大插入,我想确保除了读取表格之外没有人可以做任何事情,直到插入完成。

在保持对普通非管理员用户开放读取可用性的同时,最好的方法是什么?

谢谢!

【问题讨论】:

    标签: mysql locking innodb


    【解决方案1】:

    您可能还需要更改默认隔离级别:

     set transaction isolation level serializable;
     start transaction;
     // insert data
     commit
    

    【讨论】:

    • 嗨 A1ex07。非常感谢。这是一个需要在每个查询上调用的临时解决方案(这会很棒)还是永久的?谢谢!
    • 这取决于您的应用程序的业务逻辑。可序列化隔离级别保证没有其他事务可以更改可能以某种方式影响当前事务的数据。例如,执行SELECT count(*) FROM table1 WHERE field1
    【解决方案2】:

    由于您只是插入(而不是更新),这应该不是问题。只需在单个事务中插入记录。

    如果我没记错的话,InnoDB 支持行级锁定,所以即使更新也不成问题。

    【讨论】:

      【解决方案3】:

      为什么不在一个大事务中插入呢?这样可以避免任何锁定的需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        相关资源
        最近更新 更多