南大通用GBase8s 常用SQL语句(259)

    1. SET ISOLATION 语句

使用 SET ISOLATION 语句来定义在尝试同时地访问相同行的进程之中的并发程度。

此语句是对 SQL 的 ANSI/ISO 标准的扩展。

语法

 

用法

SET ISOLATION 语句是对 ANSI SQL-92 标准的 GBase 8s 扩展。SET ISOLATION 语句可更改会话的持久的隔离级别。如果您想要通过符合 ANSI 的语句设置隔离级别,则请改为使用 SET TRANSACTION 语句。要获取这两个语句的对比信息,请参阅 SET TRANSACTION 语句。

TO 关键字是可选的,且不起作用。

对于 DIRTY READ(在 SET TRANSACTION 中称为 UNCOMMITTED)、COMMITTED READ 和 REPEATABLE READ(在 SET TRANSACTION 中称为 SERIALIZABLE in SET TRANSACTION)隔离级别,SET ISOLATION 提供与符合 ISO/ANSI 的 SET TRANSACTION 语句相同的功能。

当从数据库检索行时,数据库 isolation_level 影响读并发。隔离级别指定在并发 SQL 事务执行期间可发生的现象。可能发生下列现象:

  1. Dirty Read。SQL 事务 T1 修改一行。然后,SQL 事务 T2 在 T1 执行 COMMIT 之前读那行。如果 T1 然后执行 ROLLBACK,则 T2 会读了从未提交的,且可被认为从未存在的一行。
  2. Non-Repeatable Read。SQL 事务 T1 读一行。然后 SQL 事务 T2 修改或删除那行并执行 COMMIT。如果 T1 然后尝试重新读那行,则 T1 可能收到修改了的值或发现那行已被删除了。
  3. Phantom Row。SQL 事务 T1 读满足某搜索条件的多行 N 的集合。然后 SQL 事务 T2 执行 SQL 语句,该语句生成满足 SQL 事务 T1 所使用的搜索条件的一个或多个新行。如果 T1 然后以相同的搜索条件重复原来的读,则 T1 收到不同的行的集合。

数据库服务器使用分享的锁来支持尝试访问数据的进程中不同的隔离级别。

更新或删除进程在正被修改的行上总是要求排他锁。隔离级别不干扰您正在更新或删除的行。如果另一进程尝试更新或删除您正在以 Repeatable Read 隔离级别读取的行,则拒绝那个进程访问那些行。

在 GBase 8s ESQL/C 中,当 SET ISOLATION 执行时打开的那些游标检索行时,可能会或可能不会使用新的隔离级别。从打开了游标直到应用存取行这段时间,设置了的任何隔离级别都可能生效。数据库服务器使用在那个时刻生效的隔离级别,可能已经将行读到内部的缓冲区和内部的临时表之内。要确保一致性和可复现的结果,在您执行 SET ISOLATION 语句之前,请关闭任何打开的游标。

仅在打开数据库之后,您才可从客户端计算机发出 SET ISOLATION 语句。

完整连接级别设置

SET ISOLATION 语句支持完整连接级别设置。这意味着将在连接时刻本地会话环境中的值传播到所有新的或恢复的事务。这些可包括下列事务类型:

  1. 本地数据库内的事务,
  2. 跨同一服务器实例的数据库的分布式事务,
  3. 跨两个或多个数据库服务器实例的数据库的分布式事务,
  4. 带有注册在本地数据库中的符合 XA 的数据源的全局事务。

如果您更改事务之内的隔离级别,则将新的值传播回本地环境,也传播到所有随后的新的或恢复的事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值