> Doug Semig [mailto:[EMAIL PROTECTED]] wrote:
> 
> Aha!  A professional!
Thanx :-)
> 
> There are pros and cons to the timestamp/checksum method, as 
> I'm sure you
> know.  So let's go over a few of them just so on the off 
> chance that in the
> future someone with a similar question might actually look in the list
> archives.
> (I calculate that the chances of someone looking in the archives
> to reap the benefits of years of the list participants' expertise are
> exactly one in nine hundred twelve billion five hundred 
> twenty four million
> four hundred sixteen thousand two hundred ninety seven--but I 
> applaud that one!)
I completely agree :-)
> 
> PROS:
> 
>   *  The timestamp and/or checksum method of determining 
> whether or not a
> row has been changed requires only the timestamp and/or 
> checksum be passed
> to the next script (the ACTION of the HTML FORM).  Less 
> moving data around
> means less network traffic and is good.
Actually, I prefer to not abuse the checksum and always use an integer
primary key.

> 
>   *  Easy to use.  You simply compare the old timestamp/checksum to
> determine if the source record has been changed...
> [...]
> 
> CONS:
> 
>   * The timestamp/checksum is only sensitive to the row level.  If
anything
> on the underlying source row changes, the timestamp/checksum 
> check will
> indicate the underlying data has changed--even if it was an entirely
> unrelated update!  If you have a table like this:  stock (product_id,
> quantity_in_stock, quantity_spoiled_or_damaged, crc) and 
> someone somewhere
> goes and updates the quantity_spoiled_or_damaged field (which 
> you cannot
> even update from your screen) while you are updating the 
> quantity_in_stock
> field, you can get the "record has been changed by someone 
> else; do you
> want to continue?" message even though it wasn't the data you updated.
I agree. As stated in my previous posting, I only use this approach when I
have to completely disable concurrent updates. And you are right: this is no
milk-and-honey-machine. It's just yet another mechanism. You always have to
choose the right algorithm, depending on your needs (performance- and
application-wise). 
> 
>   * Cannot do the timestamp/checksum method if you don't have 
> access to the
> database schema, since it relies on having a column or columns for the
> timestamp and/or crc values.
Yep. (But this is a developers list)

>   * I personally build my update statements with PHP code.  
> That means that
> I check to see what's been updated by the user/editor and 
> build my UPDATE
> statement so it sends the shortest UPDATE query necessary to 
> the database.
So do I.

> Since I check each field to see if it's been changed anyway, this can
> nullify one of the PROs above and could become a CON because 
> it could mean
> that programmers can list unnecessary fields in the UPDATE 
> statement, which
> is unnecessary network traffic.
I prefer to update complete sets of data (as long as it's not against
performance, like updating some large BLOBs with itselves).

> 
> There are other pros and cons, but that's enough to get anyone who is
> interested in this topic started.
> 
Thanks for your thoughts!

 Thomas

> Doug
> 
> 
> At 11:23 PM 4/18/01 +0200, Thomas Lamy wrote:
> >Another way is to keep another unique value inside the table 
> to be updated
> >and remember it.
> >When needed, I add a second unique column to the table (in my case a
> >char(64)) which is filled with the current timestamp and 
> some md5 checksum.
> >I select this value before the update, pass it along with 
> the HTML form,
> >and, before updating, I re-select the row to be updated and 
> compare the
> >keys. If the comparision fails, the user is presented a 
> warning message,
> >else I do the update (the user's data and a new generated 
> stamp-value) with
> >the primary key _and_ the original stamp in the where 
> clause. Then I check
> >if my new stamp made it to the table, or present another warning.
> 
>   ... snip ...
> 

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to