第一个session执行:select * from table for update;
第二个session执行:insert into table values ...
比如这个表最初只有3条数据,那我在执行第一个session时,同时执行第二个session,插入一条新数据,但第一个session执行的结果只有最初的3条记录,可以解释下原因么?是碰巧还是数据库的机制保证了select同时insert,此时select出的记录肯定是insert之前的记录集?谢谢高手指点!谢谢!
我的做法可能和以下两位的说法不太一致。
我的做法:
在proc中写一个SELECT FOR UPDATE的逻辑,执行这个程序,例如现在表中有3条数据,程序中会先将SELECT FOR UPDATE的结果集放到一个cursor中,然后我将这三条数据打印到屏幕上,但每次打印都间隔5秒。
与此同时,我执行insert并commit操作,这个过程直接在plsql中进行,不超过1s。
待程序打印出3条记录后就结束了,此时打印的是insert之前的3条记录,所以我上面的提问是否成立呢?
----------------------------------------
就是说即使在select开始到select结束之间,如果有insert操作及commit操作,到select结束时也不会显示insert的数据?对于多个session同时对一个表进行操作时,难道不会出现这种情况?
session1:select开始 ---------------- select结束
session2: insert-commit