暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

刚刚 好 2022-10-21
248



1.1 SET Transaction Mode 语句

使用 SET Transaction Mode 语句来指定在当前事务期间,是在语句级还是在事务级检查约束。

语法


元素

描述

限制

语法

constraint

要更改其事务模式的约束

所有约束必须在同一数据库中存在,该数据库必须支持日志记录

标识符 

用法

要启用或禁用约束,或要更改它们的过滤模式,请参阅 SET Database Object Mode 语句。

此语句仅在带有事务日志记录的数据库中是有效的,且它的作用限于它在其中执行的事务。

使用 IMMEDIATE 关键字将约束的事务模式设置为语句级检查。当创建约束时,IMMEDIATE 是它们的缺省事务模式。

使用 DEFERRED 关键字来将事务模式设置为事务级检查。您不可将约束的事务模式更改为 DEFERRED,除非当前启用该约束。

语句级检查

当您将事务模式设置为 IMMEDIATE 时,开启语句级检查,且在每一 INSERT、UPDATE 或 DELETE 语句的结束时检查所有指定的约束。如果发生约束违反,则不执行该语句。

事务级检查

当您将约束的事务模式设置为 DEFERRED 时,关闭语句级检查,直到提交该事务时才检查所有的(或指定的)约束。在提交事务时,如果发生约束违反,则回滚该事务。

提示: 如果您推迟检查主键约束,则也推迟对那列或列的集合的非 NULL 约束检查。

事务模式的持续时间

SET Transaction Mode 语句指定的事务模式的持续时间是 SET Transaction Mode 语句在其中执行的事务。您不可在事务的外部执行此语句。一旦 COMMIT WORK 或 ROLLBACK WORK 语句执行成功,所有约束的事务模式都恢复到 IMMEDIATE。

要从事务级检查切换到语句级检查,您可使用 SET Transaction Mode 语句来设置事务模式为 IMMEDIATE,或您可使用 COMMIT WORK 或 ROLLBACK WORK 语句来终止您的事务。

指定所有约束或约束的列表

您可在 SET Transaction Mode 语句中指定数据库中的所有约束,或您可指定单个约束或约束的列表。

如果您指定 ALL 关键字,则 SET Transaction Mode 语句为数据库中的所有约束设置事务模式。如果事务中的任何语句需要检查数据库中任何表上的任何约束,则数据库服务器是在语句级还是在事务级执行检查,依赖于您在 SET Transaction Mode 语句中指定的设置。

如果您指定单个约束名称或约束的列表,则 SET Transaction Mode 语句仅为指定的约束设置事务模式。如果事务中的任何语句需要对您未在 SET Transaction Mode 语句中指定的约束进行检查,则在语句级检查那个约束,而不理会您为其他约束在 SET Transaction Mode 语句中指定的设置。

当您指定约束的列表时,不需要在同一表上定义这些约束,但它们必须存在于同一数据库中。

指定远程约束

您可设置本地约束或远程约束的事务模式。也就是说,在 SET Transaction Mode 语句中指定的约束可为在本地表上定义的约束,或在远程表上定义的约束。

设置约束的事务模式的示例

下列示例展示如何延迟事务内的约束检查,直到该事务完成为止。该示例中的 SET Transaction Mode 语句指定不检查数据库中任何表上的任何约束,直到遇到 COMMIT WORK 语句为止。

BEGIN WORK;

    SET CONSTRAINTS ALL DEFERRED;

          ...

    COMMIT WORK;

下列示例指定不检查约束的列表,直到该事务完成为止:

BEGIN WORK;

SET CONSTRAINTS update_const, insert_const DEFERRED;

...

COMMIT WORK;

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论