I was hesitant to reply since this is a MySql question and I know only of Sql Server ;)
Anyways, we were previously using something of a locking table, which contain nothing but a dummy column(usually an int column) Whenever we update/read something from the entry table we first issue an exclusive lock to that locking table, then safely modify/read to the entry table. If any subsequent request for that entry table should be reading first the locking table, if the table is locked it won't be able to modify/read the entry table. However we abandoned it for the following reasons:
1.) It isn't bulletproof, anybody can still request/modify the entry table by going directly to the entry table itself, thus defeating the purpose of that locking table in the first place.
2.)It requires n+1, db objects for every n tables, assuming every table is transactional by nature.
3.)If for some reason, the locks are not released the dreaded dead locks occur.
Currently we use the following to minimize locking:
1.) Don't issue a Begin Transaction, before user prompting, if the user won't respond locks the entry tables. This is just to stupid in the first place.
2.) Don't forget to rollback transaction from errors, and again place the rollback before prompting the user.
3.) Timestamps inclusion/checking, before and after modifications.
4.) Triggers
4.) Constraints <- this one is for data integrity but I think should be part of data modification strategy
Now the above is based on Sql Server environment but I think this applies to MySql too(although I don't know about Triggers for pre MySql 5 versions) ;)