----------------------------------------------事務特性------------------------------------------------------------
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]