Transaction basics. What is the result of 2 transactions running concurrently?
There is no implicit shared lock in REPEATABLE READ isolation level.
You need to change the transaction sequence as follows:
ISOLATION LEVEL
You could switch to the SERIALIZABLE isolation level and disable autocommit. That way, the row is locked in shared mode implicitly.
If you want to stay with REPEATABLE READ or READ COMMITTED, you will have to call SELECT ... FOR UPDATE manually before doing the UPDATE.
QUERY (Optional Suggestion)
You should also experiment with
UPDATE ACCOUNT SET amount = amount - 100 WHERE id = 123; 

along with disabled autocommit and SERIALIZABLE isolation level.
I suggested this because you are doing two queries (SELECT and UPDATE) to change the amount. You could just do it with one query.
Your Question
Since locking reads and not implicit with REPEATABLE READ, there is a possibility of 500 being used twice.
You asked

Is it possible to set the isolation level at a connection level?I.e. not touch the global isolation level?

Yes, you can set the isolation level within the session:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL   {
    REPEATABLE READ
  | READ COMMITTED
  | READ UNCOMMITTED
  | SERIALIZABLE    }