These are the options I've thought of:
UPDATE mytable set f1=newval where id=666 and f1 := f1ValueFromSelect
UPDATE mytable set f1=newval where id=666 and md5(concat(id,f1)) := checksumFromSelect
UPDATE mytable set f1=newval where id=666 and mytimestampfield := timestampFromSelect
UPDATE mytable set f1=newval, version=version+1 where id=666 and version=versionFromSelect
I like Dave, as no schema changes required. Have to keep all of record's original data on client though. How to compare blobs?
Charlie is good in that less data to send to client. Not sure about performance with blobs/clobs
Tim and Veronica are good as pretty simple though may require schema change. Timestamp looks a bit more foolproof. How cross-platform is it?