database, declarative, procedural, SQL transactions
Developers* seem to think of a transaction as a block of code. A try/catch block seems analogous at first glance — try to do a series of actions, and if one fails, roll them all back, else commit. So many people trip up and try to write code within a transaction to avoid deadlock or race conditions.
This is the source of the problems with the commands that perform an implicit
COMMIT
(that links to the 4.1 and under …