Jon*_*ood 4 sql sql-server transactions
我试图更好地理解SQL Server事务的细微差别.
假设我有一个更新1,000个现有行的查询,更新其中一个列的值为1到1,000.可以执行此查询,并且在完成时,这些行不会按顺序编号.这是因为在查询完成之前,另一个查询可能会修改其中一行.
另一方面,如果我将这些更新包装在一个事务中,这可以保证如果任何一个更新失败,我可能会失败所有更新.但它是否也意味着当我完成时,那些行将保证是顺序的?
换句话说,交易总是原子的吗?
但它是否也意味着当我完成时,那些行将保证是顺序的?
不.这与交易无关,因为您所要求的内容根本不存在:关系表没有顺序要求"顺序行"是一个错误的问题.您可以将问题重新定义为"1000个更新的行是否包含从1到1000的整个序列,没有间隙"?很可能是的,但问题的真相是,根据您进行更新的方式可能存在差距.这些差距不会出现,因为更新的行在提交之前的更新之后被修改,但是因为更新将是无操作(不会更新任何行),这是读取 - 修改 - 写回更新类型的常见问题(由于并发操作,读取和回写之间的行"消失".
要更准确地回答您的问题,您的代码是否正确,您必须发布您正在进行更新的确切代码,以及确切的表结构,包括所有索引.
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |