@
Features 事务虽然会并发执行,但会按照设定的隔离等级,利用锁和多版本记录等机制保证正确处理你面对的这种问题,最严格的 Serializable (可序列化)隔离等级理论上会保证执行结果和看起来一个一个非并发的执行完全一致(当然只是理论上,实际中不同的数据库在一些细节上还是会有些不同的偏差,需要查阅数据库文档,不过感觉你现在不需要关心这些)。
具体比如如下这个例子:
```sql
select 账户 ID, 余额 from table_name where 余额 >= 100;
update table_name set 余额 = xxxxx where 账户 ID = xxx;
```
在( PostgreSQL 数据库中)隔离等级为 RR 或 SI 时,慢一步的会话可能会在 update 时报错,事务 rollback 。MySQL 在 RR 下不会报错失败(Lost update) 但在 SI 下也会不能提交。
(所以 PostgreSQL 好!:)