执行DELETE查询时,数据究竟从何处删除?为什么数据在其他会话中仍然可见?在Oracle SQL中(在架构级别)触发DELETE查询时执行的后台进程是什么?
答案 0 :(得分:3)
答案 1 :(得分:3)
除了ziesemer向您推荐的ACID属性的讨论之外,您还应该了解Multi-Version Concurrency Control或MVCC。如果您想了解“关于它的全部内容”,请考虑阅读Philip A. Bernstein,Vassos Hadzilacos,Nathan Goodman(可供下载)阅读Concurrency Control and Recovery in Database Systems。
在Oracle和其他类似的MVCC DBMS中,当您启动事务时,会保留一个时间戳的注释,该时间戳标识该开始时间(但时间戳值不一定是自Unix Epoch值以来的简单'秒')。当该事务正在运行时,它将看不到任何在其开始时间之后插入时间戳的数据。系统保留以前版本的数据页面可用于仍在运行的事务。当事务写入页面时,它会创建一个带有新时间戳的新副本,但在修改事务提交之前,该副本不可用于其他事务,即使这样,它也只能在提交后启动的事务中使用。
答案 2 :(得分:2)
一旦发出命令,就会删除本地会话的行,但在COMMIT
之前不会为其他会话删除。