数据库:Oracle
前提:假定100万行的记录,在最后一行有一个数据a=1。
实验:你在9:00的时候查找数据,9:05的时候查到最后一行;但是,在9:01的时候有人修改了最后一行数据并提交(commit),改为a=2,瞬间完成。
问题:在9:05的时候你查到的a的值是多少?
对于Oracle数据库来说,永远是请求那一刻的数据。所以答案是1。
原理:用户发起的查询带有时间戳SCN,查询的SCN会跟每行记录的数据块头的SCN对比,如果发现是在查询时间之后做了更改,就会去该记录对应的undo区域,那里清楚的记录着之前的数值。