在网上看到的一个例子,有点不是很理解。
0)
{
--$id;
mysql_query('UPDATE a SET id='.$id);
}
# mysql 解锁
mysql_query('UNLOCK TABLES');
疑惑:如果是锁表的话,其他用户就不能查询这个表了,只有解锁之后才能查询,那后面的人岂不是要等很久才能够查询了吗
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
mysql
MyISAM引擎支持锁表,innodb支持行锁
对于一些较为严格的操作,都会采用事务,比如资金结算。但是采用事务一般很少会使用锁表,因为锁表太小题大做了,我也就是操作我的ID下的数据,结果吧别人的数据也给锁了,所以一般都会采用行锁,要使用行锁需要采用innodb,现在myisam已经被淘汰了,所以不要在考虑锁表了。
并发不大的情况,无论行锁还是锁表都不会让用户等待太久,除非你的数据太大,或者代码写的太烂。
如果并发比较大的情况,行锁也会很慢,因为用户太多,怎么轮都轮不到,针对这种情况一般采用队列。比如抢购,开始抢购的时候,所有下单的用户都会根据点击按钮的先后顺序安排到队列里,根据先进先出,逐个来处理数据,从而防止行锁产生的一系列问题。
1.这么处理等着是应该的,否则就超卖了
2.等不了太久的,一共就100个商品,就100个人排队处理的,超过100后面直接就显示没货了就完事了
3.根据2,应该一次录入100+个用户信息进入一个用户池,其他人直接返回抢购失败就完事了,就这100多个人折腾就行了
首先说明这种在MySQL中做锁表限制处理是不明智的。
限购一般都是在逻辑层做锁定处理,我知道的有两种方法
1.用redis或memcached做锁定处理
2.用队列实现