My advice is to use transactions as follows (my SQL is a bit rusty but you should get the idea):
-- begin transaction
update my_table set count = count - 1 where id = '7'
delete from my_table where id = '7' and count = 0
commit
This will ensure the atomicity of the decrement-and-delete operation.
However, one other possibility you may want to consider - don't remove it at the point where it reaches zero. Since you say the default value is zero anyway, just leave the row in there with a value of 0.
Of course, your queries will need to change to adapt to that. If you have one that lists active tokens, it will change from:
select token from my_table
to:
select token from my_table where count > 0
The decrement SQL in that case must be careful not to push the token count down to -1, so it would become:
update my_table set count = count - 1 where id = '7' and count > 0
That simplifies your SQL at the decrement time. If you still want those rows with zero-count to disappear, you could have another process that runs periodically to sweep them all up:
delete from my_table where count = 0
That's just some alternatives to consider - if you really want them gone at the exact time their count reaches zero, then use the transaction method above.