【发布时间】:2009-12-07 11:22:57
【问题描述】:
Oracle 所说的“语句级原子性”是什么意思?
【问题讨论】:
标签: oracle transactions
Oracle 所说的“语句级原子性”是什么意思?
【问题讨论】:
标签: oracle transactions
让我们引用概念中的几个章节:
Statement-Level Read Consistency
Oracle 始终强制执行语句级读取一致性。这保证了单个查询返回的所有数据都来自一个时间点——查询开始的时间。因此,查询永远不会看到脏数据,也不会看到在查询执行期间提交的事务所做的任何更改。随着查询执行的进行,只有在查询开始之前提交的数据对查询可见。语句执行开始后,查询不会看到提交的更改。
如果在执行期间的任何时候 SQL 语句导致错误,则该语句的所有影响都将回滚。回滚的效果就好像该语句从未运行过。此操作是语句级回滚。
失败的 SQL 语句只会导致它自己执行的任何工作丢失。 它不会导致当前事务中之前的任何工作丢失。
【讨论】:
这意味着您运行的任何单个 SQL 语句本质上都是原子的——它要么完全成功,要么完全失败。如果您的 SQL 语句失败,并且由于该 SQL 语句而运行的触发器也会失败。
【讨论】:
这是关于事务性质的声明:一个工作单元要么成功,要么完整地完成。如果您的事务包含两个插入和一个更新,并且更新语句失败,则数据库将回滚所有三个语句。任何递归 SQL 或其他 SQL(例如包含在触发器中的 SQL)都包含在事务的原子范围内。 Find out more.
【讨论】: