2017-11-11 16 views
0

私は成功裏に回答を検索しました。私はトランザクションを理解/学習しようとしています。何かがうまくいかない。私はコマンドラインから次のことをしています。ここでシナリオは次のとおりです。MySQL開始トランザクションがinnoDBエンジンと連携していません

MySQL [bank]> select * from account; 
+---------+---------+---------+------+ 
| acctnum | name | balance | id | 
+---------+---------+---------+------+ 
|  100 | Andy | 0.00 | 10 | 
|  200 | Allison | 50.00 | 20 | 
|  300 | Alex | 0.00 | 30 | 
|  400 | Joe  | 0.00 | 40 | 
+---------+---------+---------+------+ 
4 rows in set (0.00 sec) 

MySQL [bank]> set autocommit=0; 
Query OK, 0 rows affected (0.00 sec) 

MySQL [bank]> start transaction; 
Query OK, 0 rows affected (0.00 sec) 

MySQL [bank]> update account set id=10 where acctnum=200; 
ERROR 1062 (23000): Duplicate entry '10' for key 'id' 
MySQL [bank]> update account set balance=10 where acctnum=200; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

MySQL [bank]> commit; 
Query OK, 0 rows affected (0.00 sec) 

MySQL [bank]> select * from account; 
+---------+---------+---------+------+ 
| acctnum | name | balance | id | 
+---------+---------+---------+------+ 
|  100 | Andy | 0.00 | 10 | 
|  200 | Allison | 10.00 | 20 | 
|  300 | Alex | 0.00 | 30 | 
|  400 | Joe  | 0.00 | 40 | 
+---------+---------+---------+------+ 
4 rows in set (0.00 sec) 

ご覧の通り、私は意図的に間違った最初のアップデートを行い、2回目の更新が許可されていないとバランスが10に任意のアイデアを更新されていないはずですか、私が何かをしないのです期待しますか?前もって感謝します。

答えて

0

いずれかのステートメントにエラーがあると、MySQLはトランザクションを無効にしません。誤ったステートメントはもちろんデータを変更しませんが、エラーを起こさない他のステートメントは、COMMITの場合でも有効です。

これをPostgreSQLで試してみると、ROLLBACKになり、2番目のUPDATEというステートメントは機能しません。

関連する問題