Protect table from wrong data using locks or transactions
Plan A:  Add FOR UPDATE to the SELECT.

Plan B:  Add UNIQUE(flat_id, creator_id, is_reserved)

If neither of those work, then I am confused by your business logic; please explain further.