2011-06-15 50 views
0

我有一种情况需要锁定2个表格,直到单独完成这两个表格的某些操作。为此我选择了“交易”。 因此,在“START TRANSACTION”和“COMMIT”之间,如果有人试图插入这些表,这些查询会发生什么?他们会被保留在队列中并在交易完成后执行? 理想情况下,我的要求是什么..他们不应该插入,直到我的交易已经承诺。在提交事务之前,在该事务中正在使用的表上的查询会发生什么?

请任何人告诉我的情况。

在此先感谢! SuryaPavan

+0

考虑阅读手册:http://dev.mysql.com/doc/refman/5.5/en/lock-tables.html – 2011-06-15 14:17:00

回答

1

当交易启动时,它与世界其他地方隔离。这是我在ACID

在交易过程中,如果有人试图插入任何内容 - 即会发生插入,但不会中断您以任何方式执行的交易。相同的规则适用于另一个方向。

如果你有要求直接锁定整个表插入,直到事务成功 - 这听起来像一个糟糕的设计,你应该重新考虑,如果你在做什么是真正的最佳。

+0

基本上,我想截断一个表并更新另一个表(这两个表都是相互关联的)有关)。所以,直到这两个操作完成..我不想让任何人输入记录到这些表中。如果有任何请求,他们应该在队列中,直到我的事务完成。那是我的要求是...仍然闻起来不好? :) – SuryaPavan 2011-06-15 15:18:13

+1

好吧,它现在闻起来更糟:)为什么你会需要在生产模式下截断表?如果您需要这样的功能 - 在事务之前锁定表,执行事务,以便执行两个(或多少个查询)查询,然后解锁表。这将使每个人都可以执行他们想要执行的任何操作,并确保你截断所有内容。请记住,这不是最好的解决方案,您需要使用InnoDB才能正常工作。 – 2011-06-15 15:24:31

0

如果在您的交易提交之前(即在您的交易中)插入了它们,那么交易将毫无用处。

我假设你使用的是mysql(因为你的问题是用这个标记的)......为什么不打开两个命令行会话到你的数据库并试着看看会发生什么?这比发布您的问题并等待答案花费的时间少得多,您可能在此过程中学到更多。

相关问题