/* 可以使用SET TRANSACTION ISOLATION LEVEL语句来设置ORACLE事务隔离级别,其语句结构如下 SET TRANSACTION ISOLATION LEVEL {READ COMMITTED|SERIALIZABLE} ?? -CHENZW 20110417 如何或得当前的TRANSACTION LEVEL? */ --1、READ COMMITTED事务隔离级别可以避免脏读(READ COMMITTED隔离级别下,不能看到尚未提交的数据,因此可以避免脏读) --2、READ COMMITTED事务隔离级别可以产生不可重复读(两次查询结果不一致就是不可重复读,中间update并且commit) --3、SERIALIZABLE事务隔离级别可以避免幻象数据(保证两次查询的结果集是准确的) --窗口A SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 事务处理集。 SQL> SELECT * FROM EMP; EMPID EMPNAME EMPAGE ---------- -------------------- ---------- 1 11111 27 3 11111 28 --窗口B SQL> insert into emp values(3,'chenzz',28); 已创建 1 行。 SQL> commit; 提交完成。 --窗口A SQL> select * from emp; EMPID EMPNAME EMPAGE ---------- -------------------- ---------- 1 11111 27 3 11111 28 SQL> update emp set empname='0000' where empid=1; update emp set empname='0000' where empid=1 * 第 1 行出现错误: ORA-08177: 无法连续访问此事务处理 --4、在READ ONLY事务隔离级别中不能使用DML操作 SQL> set transaction read only; 事务处理集。 SQL> select * from emp; EMPID EMPNAME EMPAGE ---------- -------------------- ---------- 1 2222 27 3 11111 28 3 chenzz 28 SQL> insert into emp values(2,'chen',29); insert into emp values(2,'chen',29) * 第 1 行出现错误: ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作
事务与锁定-设置事务的隔离级别
最新推荐文章于 2024-09-08 10:40:56 发布