是数据库操作原子
回答
更新将写锁,所以没有并发操作将实际发生在表上。
n will not be greater than 1.
不Postgres的使用行版本没有任何锁?我可能是错的,我只是好奇。 –
@VladimirBaranov现在用*锁能够* [MVCC](http://www.postgresql.org/docs/current/static/mvcc.html)。 –
update mytable set n=n+1 where n=0;
不管是不是 'N' 终于将大于1
没有也不会是 “大于1” 因为添加1
到0
产量1
。
所以n
将等于到1
,而不是 “大于1”。
是的,它是保证所有先前为0(零)的值都是1(一)在更新完成后没有错误。
这里棘手的部分是“以前”。在此更新正在运行时插入'n = 0'的行怎么办?如果另一个并发更新将n设置为0(n = 1)会怎么样?我认为了解事务隔离级别非常重要。最有可能的是,n不会大于1,但最终会出现一些仍然有n = 0的行。 –
@VladimirBaranov:一(DML)语句看到数据库的一致状态,而语句运行 - 数据库是目前在该语句开始的状态。 –
- 1. 什么操作都是原子操作
- 2. CUDA:还原还是原子操作?
- 3. Node.js和MongoDB - 多个异步数据库操作的原子性?
- 4. 原子操作 - C
- 5. DerbyJS原子操作
- 6. File.Move原子操作
- 7. 操作原始PNG数据
- 8. 原子操作和原子交易
- 9. 是FD_SET,FD_CLR ...原子操作吗?
- 10. plot.lm错误:$操作是原子向量
- 11. 是XMLDocument.Save一个原子操作?
- 12. 是一个比较原子操作吗?
- 13. Azure Put Blob操作是否为原子?
- 14. 嵌套的原子操作保证是原子吗?
- 15. Memcached - GET和SET操作是否为原子操作?
- 16. HTMLHelper中的数据库操作,是吗?
- 17. 挥发和原子操作
- 18. 写一个原子操作
- 19. x86 128位原子操作
- 20. ARM中的原子操作
- 21. 让两个操作原子
- 22. Qt原子操作实现
- 23. 原子操作实现
- 24. Django中的原子操作?
- 25. CUDA中的原子操作
- 26. CUDA原子操作列表
- 27. 原子操作在C++
- 28. Sequelize中的原子操作
- 29. Google云数据存储是否支持原子操作,对于计数器等?
- 30. 是原子变量的多重赋值,是一个原子操作吗?
假设你正在使用的交易,然后按[Postgres的(http://www.postgresql.org/about/)*完全符合ACID *,其中** ** ACID是*原子* * *一致,*隔离*和*耐用*。 –
如果不使用事务,这个操作是否原子? – tomnotcat
这里有很多操作。读取和写入是不同的步骤,这不是原子的。在这种情况下,它是* *安全,因为更新需要在该行的锁,直到它写入新的版本,然后退出持有它。 –