|
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
|