Вы можете легко сделать это, используя эксклюзивные блокировки:
Для упрощения тестовой таблицы:
CREATE TABLE t1 (id int not null auto_increment primary key, reserved int);
INSERT INTO t1 VALUES (0,0), (1,0);
Процесс A:
BEGIN
SELECT id, reserved from t1 where id=2 and reserved=0 FOR UPDATE;
UPDATE t1 SET reserved=1 WHERE id=2 and reserved=0;
COMMIT
Если попытается Процесс B чтобы обновить ту же запись до того, как процесс А завершил транзакцию, он должен дождаться снятия блокировки (или тайм-аута):
update t1 set reserved=1 where id=2 and reserved=0;
Query OK, 0 rows affected (12.04 sec)
Rows matched: 0 Changed: 0 Warnings: 0
И, как вы можете видеть, процесс Б ничего не обновлял.