如果我知道错误,请纠正我。当我们命令更新一行时,数据库会执行删除和删除操作。谁能告诉我为什么或建议我阅读一篇文章?为什么数据库在删除和插入时更新行?
回答
一些数据库将使用删除和插入来实现更新,并且将有一个日志结构的文件系统,因此对行的更新会将旧的删除行留在其原始位置,并在某处写入该行的新副本其他。
查看http://blog.notdot.net/2009/12/Damn-Cool-Algorithms-Log-structured-storage讨论日志结构文件系统的一般用途和数据库。
在什么系统使用这个条款,上述参考文献提及:
跟我唱它的赞美诗那么大声,你可能想知道什么 系统已经使用这种算法。有令人惊讶的少数 我所知道的,但这里有一些显着的:
尽管最初的Berkeley DB的使用相当标准的架构,Java移植,BDB-JE使用所有的组件,我们刚刚描述。
CouchDB使用刚才描述的系统,除了不是将日志分成段和垃圾收集它们,而是在有足够陈旧的数据积累时重写它的整个数据库。
PostgreSQL使用MVCC,它的writeahead日志结构化,以允许我们描述的增量备份方法。
App Engine数据存储基于Bigtable,它采用不同的磁盘存储方法,但事务层 使用乐观并发。有关使用日志结构附加,而不是替代更新的优点
http://blogs.justonedatabase.com/tag/update-in-place/也举行了会谈。它提到:
当我们追加更新,而不是覆盖数据,我们能够保持 旧的和一致的版本的数据,而更新是在 进步,这提供了一个强大的恢复机制应该 更新失败。我们可以轻松地为更新添加水印,只有当我们知道更新已完成并成功保存在存储中时,我们才可以选择仅移动该水印。鉴于 更新原地语义,我们必须在更新发生之前将旧版本 写入并保留在单独的日志中,以便能够保证从失败的更新中恢复(假设从数据库完全恢复 备份副本对于大多数 人来说有点过于简单)。
大多数DBMS将尝试在没有删除/插入的情况下进行更新。
但是由于物理存储的原因,可能会有一些情况需要这种情况。您更新聚簇索引执行全表扫描,更新将更改表中该记录的位置,例如,
update table set clusterindexcol = clusterindexcol + 10
当记录移动到物理表内的不同位置时,它可能会第二次更新。
或者您正在更新多个行的主键列,检查重复项的最简单实现是delete/insert。
- 1. 在C#中使用数据库插入,删除和更新?
- 2. 数据库操作选择,更新,插入和删除
- 3. 从SQLite数据库插入,更新和删除(Android)
- 4. TelerikRadGrid如何插入,更新和删除到SQL数据库
- 5. 插入/删除行时更新表格
- 6. 烧瓶:在数据库中插入,删除和更新后发布数据
- 7. 在mysql数据库中插入更新和删除复选框数据
- 8. 如何在从UITableView插入和删除行时正确更新数据源?
- 9. 插入,更新和删除在vb.net
- 10. 插入和更新,在DB中删除
- 11. 如何删除和为什么自动输入数据库?
- 12. mysql删除然后插入。不为AI表插入删除行!为什么?
- 13. 使用vb.net从Sql数据库插入,更新和删除数据?
- 14. 删除和更新数据库c#
- 15. sqlite多个数据库插入/更新/删除
- 16. 简单的数据库视图(更新,插入,删除)
- 17. oracle数据库中的日志插入/更新/删除
- 18. 如何将异常(插入,删除和更新)引入到Oracle数据库中?
- 19. 更新/插入/数据库
- 20. 在选择,更新,插入和删除操作期间锁定数据库
- 21. 数据库插入,更新和删除应该包含在try/catch中吗?
- 22. 为什么数据库在重新安装apk后被删除?
- 23. GridControl删除多个行和更新记录在数据库
- 24. JPA不插入数据库,为什么?
- 25. 添加更新,删除,插入按钮以运行jtable数据
- 26. SQL更新,删除并同时插入
- 27. 更新/删除/插入DataGridView
- 28. 什么时候UITableView内容大小更新与行插入/删除动画
- 29. ORACLE和TRIGGERS(插入,更新,删除)
- 30. MySql触发更新,插入和删除
你介意解释一下好吗?用一些例子。 –
也许你指的是如何更新B-Tree索引? DBMS不能只是改变键值,而不能将它移动到索引结构中的不同位置。 –