----------------------------------------------事务特性------------------------------------------------------------
1.原子性(atomicity) --事务处理要么全部进行,要么不进行。
2.一致性(consistency) –事务处理要将数据库从一种状态转变为另 一种状态。
3.隔离性(isolation) –在事务处理提交之前,事务处理的效果不能由系统中的其他事务看到。
4.持久性(durability) –一旦提交了事务,他就永远生效。
5.set 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 通过使用 INSERT、UPDATE 和 SELECT…FOR UPDATE 语句自动获取行级锁
SELECT…FOR 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]