Home >> FAQs/Tutorials >> MySQL Tutorials

MySQL FAQs - Transaction Management: Commit or Rollback

By: FYIcenter.com

Part:   1   2  3  4  5  6  7  8  9  10 

A collection of 24 FAQs on MySQL transaction management. Clear answers are provided with tutorial exercises on starting and ending transactions; committing and rolling back transactions; transaction isolation levels: read committed and repeatable read; locks and dead locks. Topics included in this FAQ are:

  1. What Is a Transaction?
  2. How To Start a New Transaction?
  3. How To End the Current Transaction?
  4. How To Create a Table for Transaction Testing?
  5. How To Switch between Autocommit-On and Autocommit-Off Modes?
  6. How To Find Out the Current Transaction Mode?
  7. How To Start a New Transaction Explicitly?
  8. How To Commit the Current Transaction?
  9. How To Rollback the Current Transaction?
  10. What Happens to the Current Transaction If a START TRANSACTION Is Executed?
  11. What Happens to the Current Transaction If a DDL Statement Is Executed?
  12. What Happens to the Current Transaction If the Session Is Ended?
  13. What Happens to the Current Transaction If the Session Is Killed?
  14. How Does MySQL Handle Read Consistency?
  15. What Are Transaction Isolation Levels?
  16. How To View and Change the Current Transaction Isolation Level?
  17. What Is a Data Lock?
  18. How To Experiment Data Locks?
  19. How Long a Transaction Will Wait for a Data Lock?
  20. What Happens to Your Transactions When ERROR 1205 Occurred?
  21. What Is a Dead Lock?
  22. How To Experiment Dead Locks?
  23. What Happens to Your Transactions When ERROR 1213 Occurred?
  24. What Are the Impacts on Applications from Locks, Timeouts, and DeadLocks?

Please note that all answers and tutorials are based on MySQL 5.0 with transaction-safe storage engines, like InnoDB. Sometimes you may need to run previous tutorials in order to continue a later tutorial.

What Is a Transaction?

A transaction is a logical unit of work requested by a user to be applied to the database objects. MySQL server introduces the transaction concept to allow users to group one or more SQL statements into a single transaction, so that the effects of all the SQL statements in a transaction can be either all committed (applied to the database) or all rolled back (undone from the database).

The transaction concept only works on tables that use transaction-safe storage engines, like InnoDB and BDB. For transaction-unsafe storage engines, like MyISAM, transaction will be ignored.

How To Start a New Transaction?

MySQL server offers two modes to manage transactions:

  • Autocommit On - Default mode. Can be started with "SET AUTOCOMMIT = 1" command. In this mode, every single SQL statement is a new transaction. All changes will be committed at the end of the statement execution.
  • Autocommit Off - Can be started with "SET AUTOCOMMIT = 0" command. In this mode, multiple SQL statements can be grouped into a single transaction.

When a client program starts a new connection session with the MySQL server, the client program can start a new transaction implicitly or explicitly in the following ways:

  • In "Autocommit On" mode, every executable statement will implicitly start a new single-statement transaction.
  • In "Autocommit Off" mode, the first executable statement of a new session will implicitly start a new multi-statement transaction.
  • In "Autocommit Off" mode, the first executable statement after a previous transaction has been ended will implicitly start a new multi-statement transaction.
  • In "Autocommit On" mode or "Autocommit Off" mode, "START TRANSACTION" will explicitly start a new multi-statement transaction.

How To End the Current Transaction?

There are several ways the current transaction can be ended implicitly or explicitly:

  • In "Autocommit On" mode, a single-statement transaction will be ended implicitly when the execution of the statement ends. Changes will be committed.
  • Running the COMMIT command will explicitly end the current transaction. Changes will be committed.
  • Running the ROLLBACK command will explicitly end the current transaction. Changes will be rolled back.
  • Running the START TRANSACTION command will explicitly end the current transaction. Changes will be committed.
  • Running any DDL statement will implicitly end the current transaction. Changes will be committed.
  • Disconnecting a client session will implicitly end the current transaction. Changes will be rolled back.
  • Killing a client session will implicitly end the current transaction. Changes will be rolled back.

(Continued on next part...)

Part:   1   2  3  4  5  6  7  8  9  10 

MySQL Tutorials:

More...


Other Tutorials/FAQs:

More...


Related Resources:

More...


Selected Jobs:

More...