2010-05-07 66 views
2

我在当前的web应用程序中创建了包含几千行的更大的插入,我希望确保没有人能够执行任何操作,但只能读取表,直到插入完成。暂时锁定innoDB表

这样做的最佳方式是什么,同时保持正常的非管理员用户的读取可用性?

谢谢!

回答

2

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

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

嗨A1ex07。非常感谢。这是一个临时解决方案,需要在每个查询中调用(这会很棒)还是永久性的?谢谢! – Industrial 2010-05-07 22:22:59

+0

这取决于您的应用程序的业务逻辑。可序列化的隔离级别保证没有其他事务可以改变可能以某种方式影响当前事务的数据。例如,在执行SELECT count(*)FROM table1 WHERE field1 <10之后,如果更改查询结果,其他事务将无法插入/删除/更新table1中的记录。因此,如果您的INSERTS不必按特定顺序执行,并且每个下一个查询都不依赖于以前,则可以在单独的事务中运行每个查询... – a1ex07 2010-05-10 15:28:27

1

为什么不直接在一个大交易中插入?这样可以防止需要任何锁定。

2

由于您只插入(不更新),这应该不成问题。只需在单个交易中插入记录即可。

InnoDB支持行级别锁定,如果我记得正确,所以即使更新不应该是一个问题。