Is this a good way of handling item reservations?
Placing locks is inherently fragile, especially on a website.  HTTP is stateless, and a user could walk away or close the browser at any time, leaving a lock in place forever.

I would create a table of Lock objects, where each Lock refers to an item, states the quantity, and most importantly has a creation timestamp.  Locks that are too old can easily be purged or ignored.