让我们创建Page.php
query1
query2
query3
有没有办法锁定几个表,所以如果一个用户访问Page.php而第二个用户稍后打开此页面,则第二个用户需要等到第一个用户的所有查询都执行完毕。
更重要的是,如果同一页面上有几百个用户,它会非常放慢网站的速度吗?
谢谢。
答案 0 :(得分: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人,但它是非常通用的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
答案 1 :(得分: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。