事务访问模式

事务访问模式决定事务是读/写模式(READ WRITE)还是只读模式(READ ONLY)。

设置事务的属性为READ ONLY 使得用户可以从数据库中检索数据,但不能修改数据。即使没有改变任何数据,READ ONLY 事务依然必须使用一个 COMMIT 或 ROLLBACK 以结束整个事务。这是一个高层次的只读概念,它并不阻止对磁盘的写入。

设置事务的属性为 READ WRITE 使得用户不仅可以从数据库中检索数据,而且可以修改数据。即使没有改变任何数据,READ WRITE 事务也必须使用一个 COMMIT 或 ROLLBACK 以结束整个事务。

isql 中设置事务隔离级别的命令语法格式如下:

SET TRANSACTION [READ ONLY|READ WRITE];

例如,把当前事务的访问模式设置为READ WRITE可用下列语句:

SET TRANSACTION READ WRITE;

注解

在事务访问模式中,读/写模式是缺省选项。

示例

示例1: 设置事务的访问模式

--  清理环境
DROP TABLE tab1 CASCADE;

CREATE TABLE tab1 (a INT);

INSERT INTO tab1 VALUES(100);
INSERT INTO tab1 VALUES(200);


SELECT * FROM tab1 ORDER BY a;

A(int)      |
------------
100         |
------------
200         |
总数目:2
--  开启事务
BEGIN;

--  设置事务读写属性 —— 只读
SET TRANSACTION READ ONLY;

--  只读事务中插入数据失败
INSERT INTO tab1 VALUES(300);

ERROR, 事务只读,该语句出错(INSERT INTO tab1 VALUES(300)),请检查配置参数 READ_WRITE_MODE、SESSION_READONLY、ALLOW_UPDATE_UNDER_RUC、TRANSACTION ISOLATION LEVEL

--  回滚事务
ROLLBACK;


SELECT * FROM tab1 ORDER BY a;

--  开启事务
A(int)      |
------------
100         |
------------
200         |
总数目:2
BEGIN;

--  设置事务读写属性 —— 读写
SET TRANSACTION READ WRITE;

--  只读事务中插入数据成功
INSERT INTO tab1 VALUES(400);

--  新值插入成功

SELECT * FROM tab1 ORDER BY a;

--  回滚事务,将新插入的值回退
A(int)      |
------------
100         |
------------
200         |
------------
400         |
总数目:3
ROLLBACK;

SELECT * FROM tab1 ORDER BY a;


--  删除表
A(int)      |
------------
100         |
------------
200         |
总数目:2
DROP TABLE tab1;