Home >> FAQs/Tutorials >> MySQL Tutorials >> Index

MySQL FAQs - Transaction Management: Commit or Rollback

By: FYIcenter.com

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

(Continued from previous part...)

What Happens to the Current Transaction If a DDL Statement Is Executed?

If a DDL statement is executed, the current transaction will be committed and ended. All the database changes made in the current transaction will become permanent. This is called an implicit commit by a DDL statement.

The following tutorial exercise shows you that the CREATE TABLE statement forced the current transaction to be committed and ended. The subsequent ROLLBACK command had no effects on the closed transaction:

>\mysql\bin\mysql -u dev -piyf fyi

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO fyi_links (url, id)
   VALUES ('oracle.com', 112);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fyi_links (url, id)
   VALUES ('mysql.com', 113);
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE fyi_temp AS (SELECT * FROM fyi_links);
Query OK, 4 rows affected (0.22 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> ROLLBACK;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SELECT * FROM fyi_links;
+-----+---------------+-------+--------+--------------------
| id  | url           | notes | counts | created           
+-----+---------------+-------+--------+--------------------
| 101 | fyicenter.com | Good  |    999 | 2006-07-01 20:34:10
| 110 | centerfyi.com | Wrong |      0 | 2006-07-01 20:34:12
| 112 | oracle.com    | NULL  |   NULL | 2006-07-01 20:41:12
| 113 | mysql.com     | NULL  |   NULL | 2006-07-01 20:41:21
+-----+---------------+-------+--------+--------------------

What Happens to the Current Transaction If the Session Is Ended?

If a session is ended, the current transaction in that session will be rolled back and ended. All the database changes made in the current transaction will be removed.

This is called an implicit rollback when session is ended.

The following tutorial exercise shows you that the "quit" command forces the current transaction to be rolled back and ended. When the session is reconnected, you will not see the changes made by the UPDATE statements in the previous session:

>\mysql\bin\mysql -u dev -piyf fyi

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.01 sec)

mysql> UPDATE fyi_links SET url = 'FYICENTER.COM'
   WHERE id = 101;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> UPDATE fyi_links SET url = 'CENTERFYI.COM'
   WHERE id = 110;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> quit;
Bye

>\mysql\bin\mysql -u dev -piyf fyi

mysql> SELECT * FROM fyi_links;
+-----+---------------+-------+--------+--------------------
| id  | url           | notes | counts | created           
+-----+---------------+-------+--------+--------------------
| 101 | fyicenter.com | Good  |    999 | 2006-07-01 20:34:10
| 110 | centerfyi.com | Wrong |      0 | 2006-07-01 20:34:12
| 112 | oracle.com    | NULL  |   NULL | 2006-07-01 20:41:12
| 113 | mysql.com     | NULL  |   NULL | 2006-07-01 20:41:21
+-----+---------------+-------+--------+--------------------
4 rows in set (0.01 sec)

(Continued on next part...)

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


Selected Developer Jobs:

More...