2017-10-18 150 views
0

这是一个相当基本和有点奇怪的问题,我想。假设我有一个存储过程,其中包含INSERT(或MERGE)语句,然后是SELECT语句。INSERT后选择不会选择最近添加的行

当我运行SELECT时,我总能假设INSERT语句已完成写入/提交数据吗?预计SELECT语句(有时)不会选择所有最近插入的行吗?如果是这样,我需要什么选项来使SELECT语句等待INSERT语句完成(在存储过程中)或包含可能未提交的数据?

+3

是的,你可以假设,当一个语句完成,那么所有的数据被正确地放入数据库中。这与数据库的ACID属性有关,也是关系数据库是流行技术的原因之一。 –

+1

只是为了插件,如果你想确保数据插入成功,只需使用一个变量并在插入后将其设置为1,然后检查变量值是否为1,然后使用select语句。 –

+0

@GordonLinoff那么,如果没有,我该怎么办? – lith

回答

0

如果它在同一个会话中,它会看到它,无论是否已提交,除非它已被回滚。

一旦承诺其他会话可以看到它。

0

如果“选择”是不同的会话,你想读未提交的数据

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
+0

从我读过的这个有很多我不想要的副作用。我需要可重现的结果。 – lith