It prevents you from saving anything in the database if there's any errors (unless you start using savepoints). If there's a database error, you are prevented from running any more sql queries until the transaction is rolled back. It keeps transactions open for longer than you want, which could increase blocking or deadlocks. You have to have one open database connection per web request.