事务访问模式¶
事务访问模式决定事务是读/写模式(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;