2011-06-23 10 views
1

让我们创建page.php文件如果我可以锁几张桌子,那会不好?

query1 
query2 
query3 

有没有什么办法来锁定几桌,所以,如果一个用户访问page.php文件和第二用户在稍后打开该网页,第二个用户将需要等到第一个用户的所有查询都会执行。

更重要的是,如果同一页面上有几百个用户在同一时间,它会非常慢吗?

谢谢。

+0

为什么要锁定表以进行简单查询? – wallyk

+0

@wallyk:它不可能在同一时间发生。 –

+2

不要锁定。使用交易。 –

回答

2

您可以使用行级别锁定导致连接阻塞其他用户。

BEGIN TRAN 

UPDATE table1 set locked = 1; //table locks are only taken out when data is written, you could possibly also use lock hints. 
UPDATE table2 set locked = 1; 
UPDATE table3 set locked = 1; 

//Tables are locked, do whatever you need here, other users hitting the page will block at the first update statement until this connection hits the commit or rollback 

update table1 set locked = 0; 
update table2 set locked = 0; 
update table3 set locked = 0; 

COMMIT 

请注意,尽管您可以使用锁定提示使其锁定行,但select行不会导致行或表的锁定。你最好的办法就是通过在行中设置一个值到自己或添加另一列来触摸行。

数据库性能良好,因为它们适应并发性。任何时候,如果你导致连续表现的行为,你会遭受性能损失。在某些情况下,这可能没问题,这取决于你实际上在做什么。

我更多的是SQL Server的家伙,但它是非常通用的数据库管理系统的概念,为进一步的信息我会去了解一下:

事务隔离级别 http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

锁定提示 http://www.xaprb.com/blog/2006/08/05/how-to-give-locking-hints-in-mysql/

行/表锁定机制 http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html

1

有什么办法来锁定几桌

你可能用lock tables,但它更重要的是减慢你的页面向下

而且,它会减缓 网站非常多,如果有几个 几百个用户同时在 的同一页上?

如果你这样做,它会减慢你的页面。

http://dev.mysql.com/doc/refman/5.0/en/lock-tables-restrictions.html

您还可以避免使用用户级 咨询锁功能GET_LOCK()和 RELEASE_LOCK()在 某些情况下,锁定表。这些锁被保存在服务器中的散列表中的 以及用pthread_mutex_lock() 和pthread_mutex_unlock()实现的高 速度的 。请参见第11.14节, “其他功能”。

我仍然认为像其他人告诉你应该只使用transactions来代替。


P.S:你想达到什么我打赌有一个更好的方法来实现这一点。可能即使没有锁/交易。

相关问题