2011-05-20 38 views
1

我们使用的是MySQL在我们的应用程序合并观点考虑,并在文档中遇到下列令人费解的语言来:锁定MySQL视图的行为?

一个理由去选择不是Temptable明确的是,锁可以对底层表的临时后释放表已创建并在用于完成处理语句之前。这可能会导致比MERGE算法更快的锁定释放,以便其他使用该视图的客户端不会长时间阻塞。

我读到这的方式是合并视图上的选择取出读锁,但这看起来不正确。两个客户可以同时从视图中读取表格吗?

谢谢!

回答

0

我读到它的方式是,虽然它取出一个锁(它必须读取数据,对吧?),它会建立一个TEMPTABLE,然后释放锁。之后的任何工作都可以在没有锁的情况下完成,因此其他客户可以在底层表上享受乐趣。

读取锁定可能会以更快的速度释放。

+0

我想我的具体问题是这样的:“两个客户端可以同时从一个视图中读取表格吗?”更新以反映 - 我猜答案是“是”。 – spieden 2011-05-20 20:46:48

1

如果您在MyISAM表上创建视图,则SELECT和UPDATE是互斥的,因此表上的SELECT/UPDATE将阻止视图上的任何UPDATE/SELECT。所以你想保持锁紧。

在InnoDB上,这不是问题。

+0

当然,但这更多的是表锁定如何工作的功能,而不是视图引入的东西,对吗? “使用视图”的“其他客户端”的语言没有被阻止,这使得我认为视图本身以某种方式被锁定,超出了底层表(?) – spieden 2011-05-20 20:55:19