posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

oracle10g中的事务

Posted on 2008-02-24 17:20 semovy 阅读(642) 评论(0)  编辑  收藏 所属分类: Oracle数据库方面

----------------------------------------------事务特性------------------------------------------------------------

1.原子性(atomicity)  --事务处理要么全部进行,要么不进行。

2.一致性(consistency) –事务处理要将数据库从一种状态转变为另        一种状态。

3.隔离性(isolation) –在事务处理提交之前,事务处理的效果不能由系统中的其他事务看到。

4.持久性(durability) –一旦提交了事务,他就永远生效。

5set autocommit on--设置数据库系统环境为自动提交事务:

SQL> set autocommit on;

SQL> insert into t values(1,'2','2');

已创建 1 行。

提交完成。

SQL> set autocommit off;

SQL> insert into t values(1,'2','2');

已创建 1 行。

SQL> commit;

提交完成。

6.锁:(防止进程之间因为抢占资源,产生死锁而设定一种预防死锁产生的机制)

允许或者拒绝资源访问的一种机制

为了防止用户在同一时间内并发的访问和修改数据库资源,orcale中使用不同类型的锁控制对数据的并发访问,以防止用户之间出现破坏性的操作。

锁定的类型:

1)行级锁:行被排他锁定

2)表级锁:共享锁,共享更新锁,排他锁

---------------------------------------------------------

行级锁:

行被排他锁定,在某行的锁被释放之前,其他用户不能修改此行,使用 commit rollback 命令释放锁

Oracle 通过使用 INSERTUPDATE SELECTFOR UPDATE 语句自动获取行级锁

SELECTFOR UPDATE 子句

在表的一行或多行上放置排他锁,用于防止其他用户更新该行,可以执行除更新之外的其他操作,只有该用户提交事务,其他用户才能够更新gname

select * from goods where gid=1001

for update of gname;

server1                                            server2

create table goods (gid int );               

insert into goods values(1)  

insert into goods values(2)  

别的进程访问该表时,可以执行除更新之外的其他操作    

select * from goods where gid=1 for update of gid    访问server1时,可以对goods表进行添加,删除,查询,但不能修改

FOR UPDATE WAIT 子句是Oracle9i 中的新增功能:

为了防止无限期地等待锁定的行,等待间隔必须指定为数值文字,等待间隔不能是表达式、赋值变量或 PL/SQL
变量

select * from goods where gid=1001 for update of gname wait  3

等待用户释放更新锁的时间为3秒,否则超时。

-------------------------------------------

表级锁:

保护表的数据

在多个用户同时访问数据时确保数据的完整性

可以设置为三种模式:共享、共享更新和排他

语法:

        Lock table < table_name> in  <mode>;

--------------------

共享锁:仅允许其他用户执行查询操作,不能插入、更新和删除,多个用户可以同时在同一表中放置此锁

Lock  table  table_name

in share  mode   [nowait];

rollback   commit命令释放锁

Nowait  关键字告诉其他用户不用等待

lock table<tabale_name>[,<table_name>,....]

in share mode[nowait]

---------------------

共享更新锁:

锁定要被更新的行

允许其他用户同时查询、插入、更新未被锁定的行

SELECT 语句中使用“FOR UPDATE”子句,可以强制使用共享更新锁

允许多个用户同时锁定表的不同行

加锁的两种方法

(1)lock table tab_name in share update mode;

(2)Select column1, column2 From  goods Where gid=1001  For update of column1, column2

lock table<tabale_name>[,<table_name>,....] in share update mode [nowait]

-------------------------

排他锁:

与其他两种锁相比,排他锁是限制性最强的表锁,仅允许其他用户查询数据,不允许执行插入、删除和更新操作,在同一时间仅允许一位用户在表上放置排他锁

共享锁与此相反

lock table<tabale_name>[,<table_name>,....]

in exclusive mode [nowait]


只有注册用户登录后才能发表评论。


网站导航: