我正在制作一个网站,我想在标准 MyISAM 表中增加一个计数器。
简化示例:
UPDATE votes SET num = num + 1;
如果多个连接执行相同的查询,这会导致问题吗?或者 MySQL 会处理它并锁定表或其他措施以确保不存在冲突吗?
写入是原子的,但增量也需要读取。所以问题是:您确定读取是安全的,换句话说,您确定执行增量的另一个线程不会最终得到相同的增量值吗?我有疑问。 100%正确的做法是。
-- begin transaction here
select counter from myCounters where counter_id = 1 FOR UPDATE;
-- now the row is locked and nobody can read or modify its values
update myCounters set counter = ? where id = 1;
-- set ? to counter + 1 programmatically
commit; -- and unlock...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)