Or if you can't afford to lock the table in the process, before you run UPDATE {foo} WHERE {bar} you back up the relevant rows into a temporary table with SELECT * INTO foo_backup WHERE {bar}.
None of this should cause a table lock: at best you will just lock the affected rows and at worst you will end up with a predicate lock on the where clause.