我是网络编程的新手,我正在创建一个网站,我需要知道这件事: 我有一个带有计数器的数据库和一个更新它的php页面。 ES
//in pseudo code
n = get_counter_from_db(); //calls select*from table....
n+=1;
//do something with n without modifing it
update_counter_in();//calls update table set counter=n....
我的问题是: 如果两个pc同时运行这个页面,那么计数器可能只会被一个更新,因为它会发生下一个事情吗?
//counter = 0
pc1 gets the counter, n = 0 and adds 1 n = 1
pc2 gets the counter, n= 0 and adds 1 n = 1
pc1 updates the counter, counter = 1
pc2 updates the counter, counter = 1
或者服务器一个接一个地处理这两个页面?或者mySQL不会让这种情况发生?怎么样?而且,为了学习庇护,这两个查询将如何运作? (抱歉英语不好)
答案 0 :(得分:0)
更好地使用update_counter_in中的增量:
UPDATE `tablename` SET `yourfield` = `yourfield` + $incValue WHERE ...;
而不是
UPDATE `tablename` SET `yourfield` = $newValue WHERE ...;
这可以防止你的例子出现竞争状况。