I decided to go with a simple paradigm for my web-based database. Rather
than transactions, each process locks the entire database while it is
changing something, then unlocks it. This just serializes access (all other
processes will block until the one modifying the database has finished).
The method I was using is something like:
LOCK TABLE thistable, thattable, theothertable, goshthislistcangetlongtable;
Do whatever is needed;
I probably botched the syntax above.
Rather than enumerate every table in the database (which could get to be a
long list), I wondered if it is possible to just lock one table, with the
gentleman's agreement that in order to modify the database, every process
must first lock that particular table.
#1)LOCK TABLE x;
#2)Make modifications to tables x, y, and z;
Are there any race conditions in just using one table for this purpose?
For example, SQL guarantees that a given SQL statement is atomic.
But it is guaranteed that #2 will complete before #3 above?
If every process uses the same rule, can anything unexpected happen?
One more note: I'm sure that many of the skilled users on this list will be
tempted to advocate more sophisticated methods. I appreciate all advice,
but I'm just looking for an easy way to serialize access to my database and
guarantee mutual exclusion. Each operation I want to do would take at most
half a second, so another web process waiting that long won't make a
difference. Simpler is easier for me.