这是一个相当基本和有点奇怪的问题,我想。假设我有一个存储过程,其中包含INSERT
(或MERGE
)语句,然后是SELECT
语句。INSERT后选择不会选择最近添加的行
当我运行SELECT
时,我总能假设INSERT
语句已完成写入/提交数据吗?预计SELECT
语句(有时)不会选择所有最近插入的行吗?如果是这样,我需要什么选项来使SELECT
语句等待INSERT
语句完成(在存储过程中)或包含可能未提交的数据?
这是一个相当基本和有点奇怪的问题,我想。假设我有一个存储过程,其中包含INSERT
(或MERGE
)语句,然后是SELECT
语句。INSERT后选择不会选择最近添加的行
当我运行SELECT
时,我总能假设INSERT
语句已完成写入/提交数据吗?预计SELECT
语句(有时)不会选择所有最近插入的行吗?如果是这样,我需要什么选项来使SELECT
语句等待INSERT
语句完成(在存储过程中)或包含可能未提交的数据?
如果它在同一个会话中,它会看到它,无论是否已提交,除非它已被回滚。
一旦承诺其他会话可以看到它。
如果“选择”是不同的会话,你想读未提交的数据
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
从我读过的这个有很多我不想要的副作用。我需要可重现的结果。 – lith
是的,你可以假设,当一个语句完成,那么所有的数据被正确地放入数据库中。这与数据库的ACID属性有关,也是关系数据库是流行技术的原因之一。 –
只是为了插件,如果你想确保数据插入成功,只需使用一个变量并在插入后将其设置为1,然后检查变量值是否为1,然后使用select语句。 –
@GordonLinoff那么,如果没有,我该怎么办? – lith