|
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:
- What Is a Transaction?
- How To Start a New Transaction?
- How To End the Current Transaction?
- How To Create a Table for Transaction Testing?
- How To Switch between Autocommit-On and Autocommit-Off Modes?
- How To Find Out the Current Transaction Mode?
- How To Start a New Transaction Explicitly?
- How To Commit the Current Transaction?
- How To Rollback the Current Transaction?
- What Happens to the Current Transaction If a START TRANSACTION Is Executed?
- What Happens to the Current Transaction If a DDL Statement Is Executed?
- What Happens to the Current Transaction If the Session Is Ended?
- What Happens to the Current Transaction If the Session Is Killed?
- How Does MySQL Handle Read Consistency?
- What Are Transaction Isolation Levels?
- How To View and Change the Current Transaction Isolation Level?
- What Is a Data Lock?
- How To Experiment Data Locks?
- How Long a Transaction Will Wait for a Data Lock?
- What Happens to Your Transactions When ERROR 1205 Occurred?
- What Is a Dead Lock?
- How To Experiment Dead Locks?
- What Happens to Your Transactions When ERROR 1213 Occurred?
- 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
|