阅读 194

oracle事务(oracle事务隔离级别查询语句)

事务是什么

事务在数据库中是工作的逻辑单元,单个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制,可以确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。

事务特性

原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability)

**原子性(Atomicity):**一个事务里面所有包含的SQL语句都是一个整体,是不可分割的,要么不做,要么都做。 **一致性(Consistency):**事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。 **隔离性(Isolation):**数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务在并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。持久性 (Durability) : 当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。

Oracle 事务隔离级别

隔离级别描述
已提交读取Oracle 默认使用的事务隔离级别。事务内执行的查询只能看到查询执行前(而非事务开始前)就已经提交的数据。Oracle 的查询永远不会读取脏数据(未提交的数据)。
串行化串行化隔离的事务只能看到事务执行前就已经提交的数据,以及事务内 INSERT , UPDATE ,及 DELETE 语句对数据的修改。串行化隔离的事务不会出现不可重复读取或不存在读取的现象。
只读模式只读事务只能看到事务执行前就已经提交的数据,且事务中不能执行 INSERT , UPDATE ,及 DELETE 语句。

使用以下语句设定事务的隔离级别:

已提交读模式:SET TRANSACTION ISOLATION LEVEL=READ COMMITTED;

串行模式:SET TRANSACTION ISOLATION LEVEL= SERIALIZABLE;

只读模式:SET TRANSACTION= READ ONLY;

COMMIT语句(提交事务)

COMMIT 语句可以用来提交当前事务的所有更改

COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ];复制代码

参数

  • WORK:可选的。它被 Oracle 添加为符合 SQL 标准。使用或不使用 WORK 参数来执行 COMMIT 将产生相同的结果。

  • COMMENT clause:可选的。 它用于指定与当前事务关联的注释。 该注释最多可以包含在单引号中的 255 个字节的文本中。 如果出现问题,它将与事务ID一起存储在名为 DBA_2PC_PENDING 的系统视图中。

  • WRITE clause:可选的。 它用于指定将已提交事务的重做信息写入重做日志的优先级。 用这个子句,有两个参数可以指定:

    • WAIT 或 NOWAIT (如果省略,WAIT是默认值)

    • IMMEDIATE 或 BATCH(IMMEDIATE是省略时的默认值)

  • FORCE clause:可选的。 它用于强制提交可能已损坏或有疑问的事务。 有了这个子句,可以用3种方式指定FORCE:

    • FORCE'string',[integer]或FORCE CORRUPT_XID'string' 或 FORCE CORRUPT_XID_ALL

ROLLBACK语句(回滚事务)

ROLLBACK 语句可以用来撤销当前事务或有问题的事务

ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name  | FORCE 'string' ];复制代码

参数

  • WORK:可选的。 它被 Oracle 添加为符合 SQL 标准。 使用或不使用 WORK 参数来发出 ROLLBACK 会导致相同的结果。

  • TO SAVEPOINT savepoint_name:可选的。 ROLLBACK语句撤消当前会话的所有更改,直到由 savepoint_name 指定的保存点。 如果省略该子句,则所有更改都将被撤消。

  • FORCE ‘string’:可选的。它用于强制回滚可能已损坏或有问题的事务。 使用此子句,可以将单引号中的事务ID指定为字符串。 可以在系统视图中找到名为 DBA_2PC_PENDING 的事务标识。

  • 必须拥有 DBA 权限才能访问系统视图:DBA_2PC_PENDING 和 V$CORRUPT_XID_LIST。

LOCK TABLE语句(锁表)

LOCK TABLE 语句可以用来锁定表、表分区或表子分区

LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];复制代码

参数

  • tables:用逗号分隔的表格列表。

  • lock_mode:它是以下值之一:

lock_mode描述
ROW SHARE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
ROW EXCLUSIVE允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。
SHARE UPDATE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
SHARE允许并发查询,但用户无法更新锁定的表。
SHARE ROW EXCLUSIVE用户可以查看表中的记录,但是无法更新表或锁定SHARE表中的表。
EXCLUSIVE允许查询锁定的表格,但不能进行其他活动。
  • WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取 DML 锁定。

  • NOWAIT:它指定数据库不应该等待释放锁。


作者:用户7143396873045
链接:https://juejin.cn/post/7035567901721493511

 伪原创工具 SEO网站优化  https://www.237it.com/


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐