如果我可以锁定几张桌子,那会不好吗?

问题描述

| 让我们创建Page.PHP
 query1
 query2
 query3
有什么方法可以锁定几个表,因此,如果一个用户访问Page.PHP,而第二个用户稍后再打开此页面,则第二个用户将需要等到第一个用户的所有查询执行完毕。 更重要的是,如果同一页面上同时有数百个用户,这会大大降低网站的速度吗? 谢谢。     

解决方法

        您可以使用行级别锁定来导致其他用户的连接阻塞。
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专家,但这是非常通用的DBMS概念,有关更多信息,我将进行研究: 交易隔离级别 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     ,           有什么办法可以锁定几张桌子 您可以使用锁定表来执行此操作,但是这会降低页面速度   更重要的是,它会减慢   网站非常多,如果有一些   同一页面上的数百个用户   同时? 如果这样做的话,它会减慢您的页面速度。 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节,   “其他功能”。 我仍然认为,就像其他人告诉您的那样,您应该只使用交易。 附注:您敢尝试实现什么目标,我敢保证有一种更好的方法可以实现这一目标。可能甚至没有锁/事务。