簡體   English   中英

MySQL啟動事務不適用於innoDB引擎

[英]MySQL start transaction not working with innoDB engine

我一直沒有找到答案。 我試圖了解/學習交易。 某事不起作用。 我正在從命令行執行以下操作。 這是場景:

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)

如您所見,我故意將第一次更新弄錯了,並期望不允許第二次更新,並且余額應該不應該更新為10。 提前致謝。

如果其中一條語句出錯,MySQL不會使事務無效。 錯誤的語句當然不會更改數據,但是當您COMMIT時,任何不會引起錯誤的其他語句仍然會生效。

如果您在PostgreSQL上嘗試此操作,我相信您將必須進行ROLLBACK ,第二條UPDATE語句將不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM