隔离级别是否仅适用于 SELECTS 而不是 UPDATES?
展示 SELECTS 的不同隔离行为的场景
1) 0:00 Thread A runs a query that returns 1000 rows that takes 5 minutes to complete
2) 0:02 Thread B runs a query that returns the same 1000 rows
3) 0:05 Thread A updates the last 1 rows in this result set and commits them
4) 0:07 Thread B's query returns*
根据隔离级别,#4 中的结果集要么包含线程 A 的更改,要么不包含。更新也是如此吗?
以下是一个示例场景:
Thread A: UPDATE ... WHERE primary_key = 1234 AND version = 5
Thread B: UPDATE ... WHERE primary_key = 1234 AND version = 5
如果线程 A 和线程 B 同时进入它们的事务,并且线程 B 在线程 A 之后执行更新,线程 B 的更新会失败还是会“看到”版本 5 的记录并因此成功?
它依赖于数据库吗?例如 Oracle、MySql 和 PostgreSQL?