The solution is fairly easy. In you update statement you place something like this :
update table set valuefield = newvalue where keyfield = key and valuefield = oldvalue after the update you check affected rows. if affected rows = 0 then it means that somebody else already changed the valuefield. Then you have to do a reread and try again. Most of the time this is incorporated in a loop that gives the possibility for a number of retries. then you have something like this while retry < 20 do update table if affected rows <> 0 then break retry ++ enddo if retry = 20 then errormessage ----- Original Message ----- From: "Bennett Haselton" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, November 13, 2001 7:52 AM Subject: how to do increments in parallel > Say I have two running programs and both of them periodically want to > increment a value in a database. How can I do this so that the increments > will be performed correctly even if the two programs try to do them at the > same time? > > If I have code like this: > > $x = read_value_from_database(); > ++$x; > write_value_to_database($x); > > then the problem is that both programs might try and do their reads at the > same time, then increment their own copies of the number, and then write > back the same, incremented number. If the database system queues requests > properly, then it won't give any error messages, but the final value of the > number in the database will be 1 greater than what it was before, instead > of what it should be, which is 2 greater. > > Is there a single command to increment a numeric value in a database? That > way, the database program could queue those requests, run them in order, > and always end up with the stored number having the right value. > > -Bennett > > [EMAIL PROTECTED] http://www.peacefire.org > (425) 649 9024 > > > --------------------------------------------------------------------- > Before posting, please check: > http://www.mysql.com/manual.php (the manual) > http://lists.mysql.com/ (the list archive) > > To request this thread, e-mail <[EMAIL PROTECTED]> > To unsubscribe, e-mail <[EMAIL PROTECTED]> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php