Guard against a negative balance, and claw back correctly
Make the column unsigned, check inside the transaction, and let a clawback take a balance to zero rather than below it.
2 entries
Make the column unsigned, check inside the transaction, and let a clawback take a balance to zero rather than below it.
Lock both rows in a fixed order, check inside the transaction, and write a ledger entry for each side. Skipping any of the three is how balances drift.