SET TRANSACTION READ ONLY 只读事务

来源:互联网 发布:淘宝哪家眼镜店好 编辑:程序博客网 时间:2024/05/16 05:57

如果把事务设置成READ ONLY,后续查询就能看到事务开始之前提交的内容;

只读事务对于运行那些涉及到一个或多个数据表的多查询来说,是很有用的;并且,在其他用户对表进行更新操作的时候,我们也可以对同样的表进行查询操作。

在只读事务中,所有的查询都会引用同一个提供多表,多查询,读一致视图的数据库快照。其他用户可以像平时一样继续查询或更新数据。在下面的例子中,作为一个商店经理,我们可以使用一个只读事务来收集过去一天、一周和一个月的销售量。在事务中,这些数字不会受到其他更新数据的用户的影响:

DECLARE  daily_sales     REAL;  weekly_sales    REAL;  monthly_sales   REAL;BEGIN  ...  COMMIT;   -- ends previous transaction  SET TRANSACTION READ ONLY NAME 'Calculate sales figures';  SELECT SUM (amt)    INTO daily_sales    FROM sales   WHERE dte = SYSDATE;  SELECT SUM (amt)    INTO weekly_sales    FROM sales   WHERE dte > SYSDATE - 7;  SELECT SUM (amt)    INTO monthly_sales    FROM sales   WHERE dte > SYSDATE - 30;  COMMIT;   -- ends read-only transaction  ...END;  


SET TRANSACTION语句必须是只读事务中的第一条SQL语句,且只能出现一次。如果把事务设置成READ ONLY,后续查询就能看到事务开始之前提交的内容。使用READ ONLY并不会影响其他用户或事务。

SET TRANSACTION的约束
只有SELECT INTO、OPEN、FETCH、CLOSE、LOCK TABLE、COMMIT和ROLLBACK语句才允许出现在只读事务中,并且查询过程不能使用FOR UPDATE。

原创粉丝点击