[英]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.