我找不到答案但没有成功。我想了解/学习交易。有些东西不起作用。我从命令行执行以下操作。这是场景:
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.任何想法或我遗漏了什么?提前谢谢。
答案 0 :(得分:0)
如果其中一个语句出错,MySQL不会使事务无效。错误的陈述当然不会改变数据,但是当你COMMIT
时,任何其他不会导致错误的陈述仍然会生效。
如果您在PostgreSQL上尝试此操作,我相信您必须ROLLBACK
,而第二个UPDATE
语句将不起作用。