为什么一个事务需要start_ts和commit_ts两个时间戳呢?

事务执行的过程中要从PD获取两个时间戳,start_ts用于决定读取哪个版本的数据,commit_ts用于更新写过数据的版本。

我想问一下commit_ts存在的必要性是什么,为什么不直接用start_ts更新写过的数据的版本呢?

commit_ts 是用于并发处理,比较哪个提交的数据会更加的新

start_ts 是用于读取某个时刻的数据,按照 MVCC 的理解,每个数据在不同的时间点会是不同的,所以必须指定某个版本…

建议你去读一下 tidb 事务相关的内容
https://docs.pingcap.com/zh/tidb/stable/transaction-overview



start_ts和commit_ts都是为了MVCC版本的比较,以及隔离级别的实现

了解一下MVCC原理,就懂为什么需要两个时间戳了